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://powerkitpro.com/api/v1/qr/list?limit=5" -H "Authorization: Bearer pk_live_..."
curl -X POST https://powerkitpro.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
- QR codes
- Business cards
- Proposals
- Booking pages
- QR menus
- Reviews
- Link pages
- Certificates
- Event programs
- Seating charts
- Forms
- Waivers
- Support and invites
Account
| Endpoint | Arguments |
|---|---|
GET/api/v1/meMy 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 and Contacts are connected. Call this first when you need to know what the account can do. | none |
GET/api/v1/list/productsList PowerKit products (powerkit_list_products) The twelve 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/appsMy 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), 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
| Endpoint | Arguments |
|---|---|
GET/api/v1/qr/listList 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? stringMatch on the name or the target link. folder? stringfolder limit? integer, default 50How many to return (1 to 200). offset? integer, default 0How many to skip, for the next page. |
POST/api/v1/qr/createCreate 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 stringA label only the owner sees, like "Front window flyer". target_url stringWhere a scan should go. https:// is added when missing. folder? stringOptional folder name to group codes. |
POST/api/v1/qr/update/targetChange 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 stringThe id as returned by a list tool. target_url stringThe new destination. |
GET/api/v1/qr/statsQR 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 stringThe id as returned by a list tool. days? integerHow many days back. Capped by the plan's history window. |
Business cards
| Endpoint | Arguments |
|---|---|
GET/api/v1/card/listList 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 50How many to return (1 to 200). offset? integer, default 0How many to skip, for the next page. |
POST/api/v1/card/createCreate 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 stringfull name title? stringJob title. company? stringcompany phone? stringphone email? stringwebsite? stringwebsite address? stringOffice address, shown with a Directions button. bio? stringbio links? arrayUp to 8 links such as LinkedIn or a booking page. lead_capture? boolean, default trueShow the "share your info" form on the card. |
GET/api/v1/card/leadsLeads 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 stringThe id as returned by a list tool. limit? integer, default 50How many to return (1 to 200). offset? integer, default 0How many to skip, for the next page. |
Proposals
| Endpoint | Arguments |
|---|---|
GET/api/v1/bid/listList 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 | declinedstatus limit? integer, default 50How many to return (1 to 200). offset? integer, default 0How many to skip, for the next page. |
GET/api/v1/bid/getGet a proposal (powerkit_bid_get) One proposal in full: intro, packages, line items (with which are optional), discount, tax, deposit, terms, status history and totals. | id stringThe id as returned by a list tool. |
POST/api/v1/bid/createCreate 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 stringtitle client_name? stringclient name client_email? stringclient email client_company? stringclient company intro? stringOpening paragraph the client reads first. line_items? array, default []line items packages? arrayMutually exclusive options; the client picks one. discount? objectdiscount tax_rate? numberPercent, e.g. 7.5. deposit? objectDeposit asked for on approval. notes? stringTerms and conditions. valid_until? stringYYYY-MM-DD. Defaults to 30 days from now. |
POST/api/v1/bid/share/linkProposal 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 stringThe id as returned by a list tool. mark_sent? boolean, default falseAlso mark a draft as sent. |
Booking pages
| Endpoint | Arguments |
|---|---|
GET/api/v1/booking/pagesList 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/listList 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? stringThe id as returned by a list tool. upcoming? boolean, default trueOnly bookings that start from now on. from? stringEarliest date (in the page time zone). to? stringLatest date, inclusive. status? string: confirmed | pending_payment | cancelled | expiredstatus limit? integer, default 50How many to return (1 to 200). offset? integer, default 0How many to skip, for the next page. |
GET/api/v1/booking/availabilityOpen 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 stringThe id as returned by a list tool. service_id stringThe id as returned by a list tool. date stringA date as YYYY-MM-DD. |
POST/api/v1/booking/canceldestructiveCancel a booking (powerkit_booking_cancel) Cancels an appointment as the owner. The client gets a cancellation email and the time opens up again. Cannot be undone; ask before calling it. | page_id stringThe id as returned by a list tool. booking_id stringThe id as returned by a list tool. |
QR menus
| Endpoint | Arguments |
|---|---|
GET/api/v1/menu/listList 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/itemsMenu items (powerkit_menu_items) Every section and item on one menu with ids, prices, dietary tags, sold-out and hidden flags. | menu_id stringThe id as returned by a list tool. |
POST/api/v1/menu/update/itemUpdate 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 stringThe id as returned by a list tool. item_id stringThe id as returned by a list tool. price? numberNew price in dollars, e.g. 12.5. sold_out? booleantrue to 86 it, false to bring it back. hidden? booleanhidden name? stringname description? stringdescription price_note? stringShown instead of a price, like "market price". |
Reviews
| Endpoint | Arguments |
|---|---|
GET/api/v1/reviews/listList 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? stringThe id as returned by a list tool. status? string: pending | approved | hiddenstatus limit? integer, default 50How many to return (1 to 200). offset? integer, default 0How many to skip, for the next page. |
POST/api/v1/reviews/approveApprove 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 stringThe id as returned by a list tool. item_id stringThe id as returned by a list tool. action? string: approve | hide | feature | unfeature, default "approve"action |
Link pages
| Endpoint | Arguments |
|---|---|
GET/api/v1/links/pagesList 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/addAdd 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 stringThe id as returned by a list tool. title? stringButton text. Defaults to the address. url stringurl icon? stringAn emoji shown before the title. |
GET/api/v1/links/statsLink 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 stringThe id as returned by a list tool. days? integer, default 30days |
Certificates
| Endpoint | Arguments |
|---|---|
GET/api/v1/certs/templatesList 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/listList 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? stringThe id as returned by a list tool. q? stringPart of a recipient name or course. limit? integer, default 50How many to return (1 to 200). offset? integer, default 0How many to skip, for the next page. |
POST/api/v1/certs/issueIssue 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 stringThe id as returned by a list tool. recipients arrayrecipients course? stringDefault course name. date? stringDefault date. hours? stringhours custom? stringcustom |
Event programs
| Endpoint | Arguments |
|---|---|
GET/api/v1/event/listList 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 50How many to return (1 to 200). offset? integer, default 0How many to skip, for the next page. |
GET/api/v1/event/getGet 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 stringThe id as returned by a list tool. |
POST/api/v1/event/add/sessionAdd 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 stringThe id as returned by a list tool. title stringtitle time_label? stringFree text shown to guests, e.g. "6:30 PM" or "After dinner". start_time? stringHH:MM, 24-hour, event local time. end_time? stringend time day? stringFor multi-day events: which day. Defaults to the first day. description? stringdescription location? stringRoom or stage. speaker_ids? arrayspeaker ids |
Seating charts
| Endpoint | Arguments |
|---|---|
GET/api/v1/seat/chartsList 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 50How many to return (1 to 200). offset? integer, default 0How many to skip, for the next page. |
GET/api/v1/seat/tablesTables 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 stringThe id as returned by a list tool. |
GET/api/v1/seat/guestsGuests 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 stringThe id as returned by a list tool. q? stringPart of a guest or party name. unseated_only? boolean, default falseunseated only limit? integer, default 50How many to return (1 to 200). offset? integer, default 0How many to skip, for the next page. |
POST/api/v1/seat/add/guestsAdd 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 stringThe id as returned by a list tool. guests arrayguests |
POST/api/v1/seat/assignSeat 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 stringThe id as returned by a list tool. guest_id stringThe id as returned by a list tool. table_id? stringLeave out to unseat. allow_over_capacity? boolean, default falseallow over capacity |
Forms
| Endpoint | Arguments |
|---|---|
GET/api/v1/forms/listList forms (powerkit_forms_list) PowerForms on this account: titles, public links, whether each is taking responses, and response counts. | none |
GET/api/v1/form/responsesForm responses (powerkit_form_responses) Responses to one form, newest first, with every answer. Pass the form id from powerkit_forms_list. | id stringThe id as returned by a list tool. limit? integer, default 50How many to return (1 to 200). offset? integer, default 0How many to skip, for the next page. |
Waivers
| Endpoint | Arguments |
|---|---|
GET/api/v1/waivers/listList 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/signaturesSigned waivers (powerkit_waiver_signatures) Signed copies of one waiver, newest first: who signed, for which participant, when, and whether it is still valid. | id stringThe id as returned by a list tool. limit? integer, default 50How many to return (1 to 200). offset? integer, default 0How many to skip, for the next page. |
GET/api/v1/waiver/checkCheck 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 stringName, email or phone. |
Support and invites
| Endpoint | Arguments |
|---|---|
GET/api/v1/invite/linkMy 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/ticketsMy 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? stringRead this ticket and its messages instead of listing. |
POST/api/v1/support/openOpen 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 stringA short subject. message stringWhat happened and what they expected. product? string: account | form | book | qr | link | card | review | quote | waiver | menu | cert | program | seatWhich tool it is about (a product key, or "account" for login and billing). Leave out for a general question. |
Questions or a tool you need that is not here: support@powerkitpro.com.