API Weesify
Cipta pautan dan kod QR, selaraskan kenalan, dan baca halaman bio, borang, pesanan, kursus, tempahan, acara dan analitik anda daripada kod anda sendiri. JSON melalui HTTPS, versi 1.
Baca atau tulis, mengikut sumber. Token tidak pernah melakukan lebih daripada orang yang membuatnya.
Had kadar bagi setiap token dan setiap pelan, dilaporkan dalam pengepala pada setiap jawapan.
HMAC-SHA256 dengan cap masa, dicuba semula dengan backoff, dengan log penghantaran yang boleh anda hantar semula.
Satu dokumen, dijana daripada sumber yang sama dengan halaman ini. Import ke mana-mana klien.
Pengesahan
Buat token dalam ruang kerja anda di bawah Tetapan → Pembangun (pemilik dan pentadbir). Ia ditunjukkan sekali sahaja, jadi simpannya dalam rahsia pelayan anda, jangan sekali-kali dalam halaman web atau aplikasi yang dimuat turun orang. Hantarkannya dalam pengepala Authorization:
curl https://weesify.com/api/v1/workspace \
-H "Authorization: Bearer wsy_your_token"
Token dimiliki oleh satu ruang kerja. Pada setiap panggilan ia hanya boleh melakukan apa yang dibenarkan oleh skopnya dan apa yang masih boleh dilakukan oleh orang yang menciptanya: jika mereka keluar atau peranan mereka berubah, token akan mengikut. Batalkan token bila-bila masa; ia berhenti berfungsi serta-merta.
Datang daripada API Weesify lama? Kunci API lama anda terus berfungsi di sini, sebagai token pembawa, selama 90 hari selepas perpindahan, dengan capaian yang sama seperti API lama. Buat token baharu sebelum itu; Tetapan → Pembangun menunjukkan bila kunci lama anda tamat.
Mula pantas
Mana-mana klien HTTP boleh digunakan. Tiga panggilan merangkumi asas: baca, cipta dengan selamat dan semak had anda.
# 1. Pautan terbaru anda
curl "https://weesify.com/api/v1/links?limit=5" \
-H "Authorization: Bearer $WEESIFY_TOKEN"
# 2. Cipta satu (percubaan semula dengan kunci yang sama tidak akan mencipta dua)
curl -X POST https://weesify.com/api/v1/links \
-H "Authorization: Bearer $WEESIFY_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: signup-2026-1042" \
-d '{"destination_url": "https://example.com/offer"}'
# 3. Lihat pengepala had kadar
curl -i https://weesify.com/api/v1/workspace -H "Authorization: Bearer $WEESIFY_TOKEN"
Setiap jawapan ialah JSON. Satu item datang sebagai {"data": {…}}; senarai sebagai {"data": […], "meta": {…}}.
Skop
| Skop | Membenarkan token |
|---|---|
| links:read | Pautan pendek dan bilangan kliknya |
| links:write | Cipta, ubah dan padam pautan pendek |
| qr:read | Kod QR dan imbasannya |
| qr:write | Cipta, ubah dan padam kod QR |
| contacts:read | Kenalan, tag dan butiran mereka |
| contacts:write | Tambah, kemas kini, tag dan padam kenalan |
| forms:read | Borang dan apa yang dihantar orang |
| store:read | Produk dan pesanan (dengan butiran pembeli) |
| sites:read | Your pages, HTML websites, their files, deployments, domains and usage |
| sites:write | Create HTML websites, upload and change files, settings and custom domains |
| sites:deploy | Publish HTML websites and roll them back |
| analytics:read | Klik dan tontonan dari semasa ke semasa |
| events:read | Acara, tarikh, jenis tiket, agenda, penceramah, penaja, peserta pameran dan tempat |
| events:write | Cipta dan ubah acara serta gerakkan melalui kitaran hayatnya |
| events:attendees | Pendaftaran, peserta, tiket dan pesanan tiket (dengan butiran orang) |
| events:checkin | Imbas tiket dan baca daftar masuk |
| bookings:read | Bookable services and bookings (with people’s details) |
| courses:read | Courses and their students’ enrolments and progress |
| webhooks:read | Webhook endpoints and their delivery log |
| webhooks:write | Add, change, test and remove webhook endpoints, and send deliveries again |
| blog:read | Blog posts (drafts included) and categories |
Permintaan dan halaman
- Hantar badan JSON dengan
Content-Type: application/json. Masa dalam ISO 8601 dalam UTC. ID ialah rentetan 26 aksara. - Senarai dipaparkan dari yang terbaharu sebagai
{"data": [...], "meta": {"limit": 25, "next_cursor": "…"}}. Hantar?cursor=untuk mendapatkan halaman seterusnya dan?limit=(1–100, lalai 25). - Wang adalah dalam unit terkecil (sen) bersama mata wangnya.
Ralat
Ralat menggunakan RFC 7807 (application/problem+json). Ralat pengesahan menyenaraikan setiap medan di bawah errors.
{
"type": "https://weesify.com/developers#errors",
"title": "Invalid request",
"status": 422,
"detail": "Some fields need attention.",
"errors": { "destination_url": ["Enter a web address."] }
}
| Status | Bermaksud |
|---|---|
| 401 | Tiada token, atau ia salah, tamat tempoh atau dibatalkan |
| 402 | Ruang kerja adalah baca sahaja sehingga pelan dipilih, atau had pelan dicapai |
| 403 | Token tidak mempunyai skop itu, orang yang membuatnya tidak boleh melakukan ini, atau akses API tiada dalam pelan |
| 404 | Tidak ditemui dalam ruang kerja ini, atau ciri tersebut dimatikan |
| 400 | Idempotency-Key tidak dalam format yang betul |
| 409 | Idempotency-Key yang sama masih diproses, atau telah digunakan untuk permintaan lain |
| 422 | Ada sesuatu yang tidak betul dalam permintaan |
| 429 | Terlalu banyak permintaan: tunggu selama Retry-After saat |
Had kadar
Setiap token boleh membuat 120 permintaan seminit dan setiap ruang kerja 600, dikira dalam tetingkap satu minit. Pelan Enterprise dan Custom membenarkan lebih banyak. Melebihi had, anda mendapat 429 dengan Retry-After: tunggu seberapa saat itu dan cuba lagi.
| Pengepala | Bermaksud |
|---|---|
| X-RateLimit-Limit | Requests a minute this token may make |
| X-RateLimit-Remaining | Requests left this minute |
| X-RateLimit-Reset | Unix time when the minute resets |
| RateLimit | IETF form: limit, remaining, reset (seconds) |
| RateLimit-Policy | The policy, e.g. 120;w=60 |
| X-Request-Id | This request’s id, as shown in your request log |
Log permintaan ruang kerja anda dan penggunaan berbanding pelan anda berada di Tetapan → Pembangun → Penggunaan & log, dipadankan mengikut X-Request-Id.
Cubaan semula
Hantar pengepala Idempotency-Key (1–80 huruf, digit, sengkang, titik, titik bertindih atau garis bawah) bersama POST. Jika rangkaian terputus dan anda mencuba semula dengan kunci, laluan dan kandungan yang sama dalam masa 24 jam, anda mendapat jawapan asal sekali lagi (ditandai Idempotent-Replayed: true) dan tiada apa dijalankan dua kali. Kunci milik token yang menghantarnya. Kunci yang sama dengan laluan atau kandungan lain mendapat 409.
Weesify CLI
Deploy folder ke laman web HTML daripada komputer atau CI anda, tarik semula, bandingkan dan undur. Satu fail Node.js 18+ tanpa pakej: muat turun dan jalankannya.
curl -fsSLo weesify.mjs https://weesify.com/developers/cli/weesify.mjs && node weesify.mjs login
node weesify.mjs init
node weesify.mjs deploy -m "Versi pertama"
SHA-256 fail semasa: e98494277685934e20bdfb05c7f9fe5087db5db66d80b2365a4d3f74ed51c8af
Pasang pada macOS, Linux atau Windows, setiap arahan, CI dan kod keluar →
Webhook
Tambah titik akhir dalam Tetapan → Pembangun → Webhook (atau dengan POST /webhooks) dan pilih acara. Weesify melakukan POST JSON kepadanya apabila sesuatu berlaku, mencuba semula kegagalan sebanyak 6 kali dalam masa kira-kira 21 jam, dan menyimpan log penghantaran 30 hari yang boleh anda hantar semula. Selepas 5 acara berturut-turut tidak dapat dihantar, titik akhir dimatikan dan pentadbir ruang kerja dimaklumkan. Jawab dengan mana-mana 2xx dalam 5 saat; ubah hala tidak diikuti.
{
"id": "evt_01j…",
"event": "order.paid",
"created_at": "2026-10-31T09:30:00+00:00",
"workspace": { "id": "01j…" },
"data": {
"contact": { "id": "01j…", "email": "ada@example.com", "name": "Ada", "subscribed": true, "tags": [] },
"details": { "order": "W-1042", "product": "Preset pack" }
}
}
Semak tandatangan. Pengepala X-Weesify-Signature ialah t=<unix time>,v1=<hex>. Kira HMAC-SHA256 bagi t + "." + raw body dengan rahsia tandatangan titik akhir anda dan bandingkannya (dalam masa malar) dengan mana-mana v1: selama sehari selepas anda menukar rahsia, terdapat dua. Tolak apa-apa yang lebih lama daripada lima minit. id acara kekal sama semasa cubaan semula, jadi anda boleh mengabaikan ulangan.
// PHP
$body = file_get_contents('php://input');
parse_str(str_replace(',', '&', $_SERVER['HTTP_X_WEESIFY_SIGNATURE']), $sig);
$expected = hash_hmac('sha256', $sig['t'].'.'.$body, getenv('WEESIFY_WEBHOOK_SECRET'));
if (abs(time() - (int) $sig['t']) > 300 || ! hash_equals($expected, $sig['v1'] ?? '')) {
http_response_code(400); exit;
}
| Acara | Bila |
|---|---|
| contact.created | Kenalan baharu |
| contact.updated | Butiran hubungan diubah |
| contact.subscribed | Dilanggan |
| contact.unsubscribed | Dinyahlanggan |
| contact.tagged | Tag ditambah |
| contact.untagged | Tag dialih keluar |
| contact.stage_changed | Peringkat ditukar |
| form.submitted | Borang dijawab |
| order.paid | Pesanan dibayar |
| order.refunded | Pesanan dibayar balik |
| booking.created | Tempahan baharu |
| booking.cancelled | Tempahan dibatalkan |
| course.enrolled | Pelajar didaftarkan |
| course.completed | Kursus selesai |
| community.joined | Menyertai komuniti |
| event.created | Acara dicipta |
| event.published | Acara diterbitkan |
| event.updated | Butiran acara diubah |
| event.cancelled | Acara dibatalkan |
| event.postponed | Acara ditangguhkan |
| event.completed | Acara selesai |
| registration.created | Pendaftaran dimulakan |
| registration.confirmed | Pendaftaran disahkan |
| registration.cancelled | Pendaftaran dibatalkan |
| ticket.purchased | Tiket dibeli |
| payment.completed | Pembayaran tiket selesai |
| payment.failed | Bayaran tiket gagal |
| ticket.refunded | Tiket dibayar balik |
| attendee.checked_in | Peserta telah mendaftar masuk |
| session.attended | Sesi dihadiri |
| waitlist.joined | Menyertai senarai menunggu |
| feedback.submitted | Maklum balas dihantar |
| post.published | Post published |
| post.failed | Post failed to publish |
| site.deployed | Website published |
| site.deploy_failed | Website failed to publish |
Ruang kerja 1 endpoint
GET/workspaceThe workspace this token belongs to, and the token’s scopes
The workspace this token belongs to, and the token’s scopes.
curl -X GET https://weesify.com/api/v1/workspace \
-H "Authorization: Bearer wsy_…"
Pautan 6 endpoints
GET/linksList short links, newest first
List short links, newest first. Skop: links:read.
| Pertanyaan | |
|---|---|
| search | Matches the back-half, destination or title |
| status | active (default), archived or all |
curl -X GET https://weesify.com/api/v1/links \
-H "Authorization: Bearer wsy_…"
POST/linksCreate a short link
Create a short link. Skop: links:write.
| Badan | |
|---|---|
| destination_url * | Where it goes (https) |
| alias | The back-half; random if empty |
| title | Only you see it |
| domain_id | One of your domains; weesify.com if empty |
| redirect_status | 301, 302, 307 or 308 |
| starts_at | ISO 8601 |
| ends_at | ISO 8601 |
| click_limit | Integer |
| utm | {source, medium, campaign, term, content} |
| forward_query | Boolean |
curl -X POST https://weesify.com/api/v1/links \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"destination_url":"\u2026"}'
GET/links/{id}One short link
One short link. Skop: links:read.
curl -X GET https://weesify.com/api/v1/links/01j… \
-H "Authorization: Bearer wsy_…"
PATCH/links/{id}Change a short link (send only what changes); archived: true archives it
Change a short link (send only what changes); archived: true archives it. Skop: links:write.
| Badan | |
|---|---|
| destination_url | |
| alias | |
| title | |
| archived | Boolean |
curl -X PATCH https://weesify.com/api/v1/links/01j… \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"destination_url":"\u2026"}'
DELETE/links/{id}Delete a short link (its address can be claimed again)
Delete a short link (its address can be claimed again). Skop: links:write.
curl -X DELETE https://weesify.com/api/v1/links/01j… \
-H "Authorization: Bearer wsy_…"
GET/links/{id}/statsClicks per day, top countries and referrers
Clicks per day, top countries and referrers. Skop: links:read + analytics:read.
| Pertanyaan | |
|---|---|
| days | 7-90 (30) |
curl -X GET https://weesify.com/api/v1/links/01j…/stats \
-H "Authorization: Bearer wsy_…"
Kod QR 5 endpoints
GET/qr-codesList QR codes
List QR codes. Skop: qr:read.
| Pertanyaan | |
|---|---|
| campaign | Only this campaign |
curl -X GET https://weesify.com/api/v1/qr-codes \
-H "Authorization: Bearer wsy_…"
POST/qr-codesCreate a QR code
Create a QR code. Skop: qr:write.
| Badan | |
|---|---|
| name * | |
| type | dynamic (default), url, text, email, phone, sms, wifi, vcard… |
| target | {type: short_link|site, id} for dynamic codes |
| payload | Content for static types, e.g. {url} |
| campaign | |
| placement | Where it’s printed |
curl -X POST https://weesify.com/api/v1/qr-codes \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"name":"\u2026"}'
GET/qr-codes/{id}One QR code, with SVG and PNG download links
One QR code, with SVG and PNG download links. Skop: qr:read.
curl -X GET https://weesify.com/api/v1/qr-codes/01j… \
-H "Authorization: Bearer wsy_…"
PATCH/qr-codes/{id}Change a QR code
Change a QR code. Skop: qr:write.
| Badan | |
|---|---|
| name | |
| target | |
| campaign | |
| placement |
curl -X PATCH https://weesify.com/api/v1/qr-codes/01j… \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"name":"\u2026"}'
DELETE/qr-codes/{id}Delete a QR code
Delete a QR code. Skop: qr:write.
curl -X DELETE https://weesify.com/api/v1/qr-codes/01j… \
-H "Authorization: Bearer wsy_…"
Kenalan 8 endpoints
GET/contactsList contacts
List contacts. Skop: contacts:read.
| Pertanyaan | |
|---|---|
| Exact address | |
| tag | A tag id |
| updated_since | ISO 8601 |
curl -X GET https://weesify.com/api/v1/contacts \
-H "Authorization: Bearer wsy_…"
POST/contactsAdd a contact
Add a contact. Skop: contacts:write.
| Badan | |
|---|---|
| email * | |
| name | |
| phone | |
| company | |
| stage | subscriber, lead, customer, student, member |
| subscribed | true only with the person’s consent (it is recorded) |
| tags | Tag names |
| fields | Custom fields by key |
curl -X POST https://weesify.com/api/v1/contacts \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"email":"\u2026"}'
GET/contacts/{id}One contact
One contact. Skop: contacts:read.
curl -X GET https://weesify.com/api/v1/contacts/01j… \
-H "Authorization: Bearer wsy_…"
PATCH/contacts/{id}Change a contact; subscribed: false unsubscribes
Change a contact; subscribed: false unsubscribes. Skop: contacts:write.
| Badan | |
|---|---|
| name | |
| stage | |
| subscribed | false only |
| tags | |
| fields |
curl -X PATCH https://weesify.com/api/v1/contacts/01j… \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"email":"\u2026"}'
DELETE/contacts/{id}Delete a contact and their history
Delete a contact and their history. Skop: contacts:write.
curl -X DELETE https://weesify.com/api/v1/contacts/01j… \
-H "Authorization: Bearer wsy_…"
POST/contacts/{id}/tagsTag a contact
Tag a contact. Skop: contacts:write.
| Badan | |
|---|---|
| tag * | A tag name (made if new) |
curl -X POST https://weesify.com/api/v1/contacts/01j…/tags \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"tag":"\u2026"}'
DELETE/contacts/{id}/tags/{tag}Remove a tag
Remove a tag. Skop: contacts:write.
curl -X DELETE https://weesify.com/api/v1/contacts/01j…/tags/01j… \
-H "Authorization: Bearer wsy_…"
GET/tagsList tags
List tags. Skop: contacts:read.
curl -X GET https://weesify.com/api/v1/tags \
-H "Authorization: Bearer wsy_…"
Borang 3 endpoints
GET/formsList forms
List forms. Skop: forms:read.
curl -X GET https://weesify.com/api/v1/forms \
-H "Authorization: Bearer wsy_…"
GET/forms/{id}One form
One form. Skop: forms:read.
curl -X GET https://weesify.com/api/v1/forms/01j… \
-H "Authorization: Bearer wsy_…"
GET/forms/{id}/submissionsWhat people submitted
What people submitted. Skop: forms:read.
| Pertanyaan | |
|---|---|
| since | ISO 8601 |
curl -X GET https://weesify.com/api/v1/forms/01j…/submissions \
-H "Authorization: Bearer wsy_…"
Kedai 4 endpoints
GET/productsList products
List products. Skop: store:read.
curl -X GET https://weesify.com/api/v1/products \
-H "Authorization: Bearer wsy_…"
GET/products/{id}One product
One product. Skop: store:read.
curl -X GET https://weesify.com/api/v1/products/01j… \
-H "Authorization: Bearer wsy_…"
GET/ordersList orders, newest first
List orders, newest first. Skop: store:read.
| Pertanyaan | |
|---|---|
| status | paid, pending, failed, refunded, cancelled |
| since | ISO 8601 |
curl -X GET https://weesify.com/api/v1/orders \
-H "Authorization: Bearer wsy_…"
GET/orders/{id}One order with its items
One order with its items. Skop: store:read.
curl -X GET https://weesify.com/api/v1/orders/01j… \
-H "Authorization: Bearer wsy_…"
Halaman bio & laman 2 endpoints
GET/sitesList bio pages and sites
List bio pages and sites. Skop: sites:read.
curl -X GET https://weesify.com/api/v1/sites \
-H "Authorization: Bearer wsy_…"
GET/sites/{id}One bio page or site
One bio page or site. Skop: sites:read.
curl -X GET https://weesify.com/api/v1/sites/01j… \
-H "Authorization: Bearer wsy_…"
Acara 23 endpoints
GET/eventsList events, newest first
List events, newest first. Skop: events:read.
| Pertanyaan | |
|---|---|
| status | draft, published, registration_open, … |
| starts_after | ISO 8601 |
| q | Name contains |
curl -X GET https://weesify.com/api/v1/events \
-H "Authorization: Bearer wsy_…"
POST/eventsCreate an event (a draft) with its first date and tickets
Create an event (a draft) with its first date and tickets. Skop: events:write.
| Badan | |
|---|---|
| name * | |
| timezone * | IANA zone, e.g. Europe/London |
| starts_local * | Wall clock in the zone: 2026-11-14T18:30 |
| ends_local * | Wall clock in the zone |
| format | in_person, virtual or hybrid |
| visibility | public, unlisted, private |
| registration_mode | open, approval, rsvp, invite, external, none |
| capacity | Integer |
| currency | ISO 4217 |
| type | An event type key |
| venue_id | One of your venues |
| recurrence | {rule: RRULE} |
| tickets | [{name, kind, price_minor, quantity}] |
curl -X POST https://weesify.com/api/v1/events \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"name":"\u2026","timezone":"\u2026","starts_local":"\u2026","ends_local":"\u2026"}'
GET/events/{id}One event
One event. Skop: events:read.
curl -X GET https://weesify.com/api/v1/events/01j… \
-H "Authorization: Bearer wsy_…"
PATCH/events/{id}Change an event (send only what changes)
Change an event (send only what changes). Skop: events:write.
| Badan | |
|---|---|
| name | |
| summary | |
| starts_local | |
| ends_local | |
| timezone | |
| capacity | |
| visibility | |
| venue_id |
curl -X PATCH https://weesify.com/api/v1/events/01j… \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"name":"\u2026"}'
POST/events/{id}/statusMove an event through its lifecycle (publish, open registration, cancel…) with the app’s rules
Move an event through its lifecycle (publish, open registration, cancel…) with the app’s rules. Skop: events:write.
| Badan | |
|---|---|
| status * | published, registration_open, registration_closed, postponed, cancelled, … |
| reason | For cancellations |
curl -X POST https://weesify.com/api/v1/events/01j…/status \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"status":"\u2026"}'
GET/events/{id}/occurrencesIts dates, with places left
Its dates, with places left. Skop: events:read.
| Pertanyaan | |
|---|---|
| upcoming | 1 = only dates that haven’t ended |
curl -X GET https://weesify.com/api/v1/events/01j…/occurrences \
-H "Authorization: Bearer wsy_…"
GET/events/{id}/ticket-typesIts ticket types and prices (minor units)
Its ticket types and prices (minor units). Skop: events:read.
curl -X GET https://weesify.com/api/v1/events/01j…/ticket-types \
-H "Authorization: Bearer wsy_…"
GET/events/{id}/registrationsRegistrations (buyers), newest first
Registrations (buyers), newest first. Skop: events:attendees.
| Pertanyaan | |
|---|---|
| status | confirmed, pending, cancelled, refunded… |
| Exact address |
curl -X GET https://weesify.com/api/v1/events/01j…/registrations \
-H "Authorization: Bearer wsy_…"
POST/events/{id}/registrationsRegister someone (same rules as the event page; paid → pay_url)
Register someone (same rules as the event page; paid → pay_url). Skop: events:attendees + events:write.
| Badan | |
|---|---|
| tickets * | {ticket_type_id: quantity} |
| email * | |
| name | |
| occurrence_id | For multi-date events |
| attendees | [{name, email}] one per ticket |
| code | Promo or access code |
| answers | Registration form answers by key |
curl -X POST https://weesify.com/api/v1/events/01j…/registrations \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"tickets":"\u2026","email":"\u2026"}'
GET/events/{id}/registrations/{item}One registration
One registration. Skop: events:attendees.
curl -X GET https://weesify.com/api/v1/events/01j…/registrations/01j… \
-H "Authorization: Bearer wsy_…"
GET/events/{id}/attendeesAttendees (one per ticket) with their ticket number
Attendees (one per ticket) with their ticket number. Skop: events:attendees.
| Pertanyaan | |
|---|---|
| status | confirmed, pending, cancelled… |
| occurrence_id | |
| checked_in | 1 |
curl -X GET https://weesify.com/api/v1/events/01j…/attendees \
-H "Authorization: Bearer wsy_…"
GET/events/{id}/attendees/{item}One attendee
One attendee. Skop: events:attendees.
curl -X GET https://weesify.com/api/v1/events/01j…/attendees/01j… \
-H "Authorization: Bearer wsy_…"
GET/events/{id}/ticketsTickets: number and status (never the QR payload)
Tickets: number and status (never the QR payload). Skop: events:attendees.
| Pertanyaan | |
|---|---|
| status | valid or void |
| number | WSY-XXXX-XXXX |
curl -X GET https://weesify.com/api/v1/events/01j…/tickets \
-H "Authorization: Bearer wsy_…"
GET/events/{id}/ordersTicket orders (commerce orders for this event)
Ticket orders (commerce orders for this event). Skop: events:attendees (+ events.finance role).
| Pertanyaan | |
|---|---|
| status | paid, pending, failed, refunded |
curl -X GET https://weesify.com/api/v1/events/01j…/orders \
-H "Authorization: Bearer wsy_…"
GET/events/{id}/sessionsAgenda sessions
Agenda sessions. Skop: events:read.
curl -X GET https://weesify.com/api/v1/events/01j…/sessions \
-H "Authorization: Bearer wsy_…"
GET/events/{id}/speakersSpeakers (public profile fields)
Speakers (public profile fields). Skop: events:read.
curl -X GET https://weesify.com/api/v1/events/01j…/speakers \
-H "Authorization: Bearer wsy_…"
GET/events/{id}/sponsorsSponsors
Sponsors. Skop: events:read.
curl -X GET https://weesify.com/api/v1/events/01j…/sponsors \
-H "Authorization: Bearer wsy_…"
GET/events/{id}/exhibitorsExhibitors
Exhibitors. Skop: events:read.
curl -X GET https://weesify.com/api/v1/events/01j…/exhibitors \
-H "Authorization: Bearer wsy_…"
GET/events/{id}/check-insCheck-in scans, with their result
Check-in scans, with their result. Skop: events:checkin.
| Pertanyaan | |
|---|---|
| result | accepted, duplicate, invalid… |
curl -X GET https://weesify.com/api/v1/events/01j…/check-ins \
-H "Authorization: Bearer wsy_…"
POST/events/{id}/check-insScan a ticket (verifies the signed QR; idempotent per client_uuid)
Scan a ticket (verifies the signed QR; idempotent per client_uuid). Skop: events:checkin.
| Badan | |
|---|---|
| payload * | The QR text, WT1.… |
| client_uuid | UUID from your device |
| direction | in or out |
| session_id |
curl -X POST https://weesify.com/api/v1/events/01j…/check-ins \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"payload":"\u2026"}'
GET/events/{id}/check-ins/{item}One check-in
One check-in. Skop: events:checkin.
curl -X GET https://weesify.com/api/v1/events/01j…/check-ins/01j… \
-H "Authorization: Bearer wsy_…"
GET/venuesYour venues
Your venues. Skop: events:read.
curl -X GET https://weesify.com/api/v1/venues \
-H "Authorization: Bearer wsy_…"
GET/venues/{id}One venue
One venue. Skop: events:read.
curl -X GET https://weesify.com/api/v1/venues/01j… \
-H "Authorization: Bearer wsy_…"
Bookings & meetings 3 endpoints
GET/booking-servicesBookable services, with length, capacity and price (minor units)
Bookable services, with length, capacity and price (minor units). Skop: bookings:read.
curl -X GET https://weesify.com/api/v1/booking-services \
-H "Authorization: Bearer wsy_…"
GET/bookingsBookings, newest first (never the guest’s private meeting link)
Bookings, newest first (never the guest’s private meeting link). Skop: bookings:read.
| Pertanyaan | |
|---|---|
| status | held, pending, confirmed, in_progress, cancelled, attended, no_show |
| service_id | One service |
| starts_after | ISO 8601 |
| starts_before | ISO 8601 |
curl -X GET https://weesify.com/api/v1/bookings \
-H "Authorization: Bearer wsy_…"
GET/bookings/{id}One booking
One booking. Skop: bookings:read.
curl -X GET https://weesify.com/api/v1/bookings/01j… \
-H "Authorization: Bearer wsy_…"
Kursus 4 endpoints
GET/coursesCourses, with lesson and student counts
Courses, with lesson and student counts. Skop: courses:read.
curl -X GET https://weesify.com/api/v1/courses \
-H "Authorization: Bearer wsy_…"
GET/courses/{id}One course
One course. Skop: courses:read.
curl -X GET https://weesify.com/api/v1/courses/01j… \
-H "Authorization: Bearer wsy_…"
GET/courses/{id}/enrollmentsIts students, with progress (never their private course link)
Its students, with progress (never their private course link). Skop: courses:read.
| Pertanyaan | |
|---|---|
| status | active or revoked |
| completed | 1 = only students who finished |
curl -X GET https://weesify.com/api/v1/courses/01j…/enrollments \
-H "Authorization: Bearer wsy_…"
GET/enrollments/{id}One enrolment
One enrolment. Skop: courses:read.
curl -X GET https://weesify.com/api/v1/enrollments/01j… \
-H "Authorization: Bearer wsy_…"
Laman web 20 endpoints
GET/websitesList HTML websites, newest first
List HTML websites, newest first. Skop: sites:read.
| Pertanyaan | |
|---|---|
| status | draft, published, unpublished, archived or suspended |
curl -X GET https://weesify.com/api/v1/websites \
-H "Authorization: Bearer wsy_…"
POST/websitesCreate an empty HTML website
Create an empty HTML website. Skop: sites:write.
| Badan | |
|---|---|
| name * | Up to 120 characters |
| slug | Its address: weesify.com/{slug}/ ([a-z0-9-], 3–63). Shared with pages and short links, so it must be free; from the name if empty |
curl -X POST https://weesify.com/api/v1/websites \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"name":"\u2026"}'
GET/websites/{id}One website: status, url (https://weesify.com/{slug}/), files and storage
One website: status, url (https://weesify.com/{slug}/), files and storage. Skop: sites:read.
curl -X GET https://weesify.com/api/v1/websites/01j… \
-H "Authorization: Bearer wsy_…"
PATCH/websites/{id}Rename it, change its address or homepage, or its routing settings
Rename it, change its address or homepage, or its routing settings. Skop: sites:write.
| Badan | |
|---|---|
| name | |
| slug | New weesify.com/{slug}/ address; the old one redirects |
| homepage | A path such as index.html |
| settings | {clean_urls, trailing_slash, spa_fallback, not_found, redirects, headers, noindex} |
curl -X PATCH https://weesify.com/api/v1/websites/01j… \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"name":"\u2026"}'
DELETE/websites/{id}Delete a website (disconnects its domains); needs sites:write and the publish permission
Delete a website (disconnects its domains); needs sites:write and the publish permission. Skop: sites:write.
curl -X DELETE https://weesify.com/api/v1/websites/01j… \
-H "Authorization: Bearer wsy_…"
GET/websites/{id}/filesEvery file in the working draft (or the live site, or one deployment): path, size, sha256, type
Every file in the working draft (or the live site, or one deployment): path, size, sha256, type. Skop: sites:read.
| Pertanyaan | |
|---|---|
| source | draft (default), live or a deployment id |
curl -X GET https://weesify.com/api/v1/websites/01j…/files \
-H "Authorization: Bearer wsy_…"
POST/websites/{id}/filesUpload files (multipart files[] with optional paths[] and dir); blocked types are reported, not stored
Upload files (multipart files[] with optional paths[] and dir); blocked types are reported, not stored. Skop: sites:write.
| Badan | |
|---|---|
| files * | multipart files[] |
| paths | multipart paths[]: each file’s relative path |
| dir | Folder to upload into |
curl -X POST https://weesify.com/api/v1/websites/01j…/files \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"files":"\u2026"}'
PUT/websites/{id}/files/{path}Write one file from the raw request body (creates folders as needed)
Write one file from the raw request body (creates folders as needed). Skop: sites:write.
curl -X PUT https://weesify.com/api/v1/websites/01j…/files/{path} \
-H "Authorization: Bearer wsy_…"
DELETE/websites/{id}/files/{path}Delete a file or folder from the draft
Delete a file or folder from the draft. Skop: sites:write.
curl -X DELETE https://weesify.com/api/v1/websites/01j…/files/{path} \
-H "Authorization: Bearer wsy_…"
POST/websites/{id}/deploymentsPublish the draft — or send a ZIP as multipart archive to replace the draft and publish it. Needs an approved review when the site requires approval
Publish the draft — or send a ZIP as multipart archive to replace the draft and publish it. Needs an approved review when the site requires approval. Skop: sites:deploy.
| Badan | |
|---|---|
| message | Shown in the deployment history |
| archive | multipart ZIP (also needs sites:write) |
| replace | With archive: 1 makes the draft exactly the ZIP (files not in it are removed) |
curl -X POST https://weesify.com/api/v1/websites/01j…/deployments \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"message":"\u2026"}'
GET/websites/{id}/deploymentsDeployment history, newest first
Deployment history, newest first. Skop: sites:read.
curl -X GET https://weesify.com/api/v1/websites/01j…/deployments \
-H "Authorization: Bearer wsy_…"
GET/websites/{id}/deployments/{item}One deployment and its status (live, failed, superseded)
One deployment and its status (live, failed, superseded). Skop: sites:read.
curl -X GET https://weesify.com/api/v1/websites/01j…/deployments/01j… \
-H "Authorization: Bearer wsy_…"
POST/websites/{id}/rollbackMake an earlier deployment live again
Make an earlier deployment live again. Skop: sites:deploy.
| Badan | |
|---|---|
| deployment_id * | A deployment of this website |
curl -X POST https://weesify.com/api/v1/websites/01j…/rollback \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"deployment_id":"\u2026"}'
GET/websites/{id}/domainsCustom domains: state, DNS records to add, HTTPS
Custom domains: state, DNS records to add, HTTPS. Skop: sites:read.
curl -X GET https://weesify.com/api/v1/websites/01j…/domains \
-H "Authorization: Bearer wsy_…"
POST/websites/{id}/domainsConnect a custom domain (pending until its TXT record verifies)
Connect a custom domain (pending until its TXT record verifies). Skop: sites:write.
| Badan | |
|---|---|
| host * | e.g. www.yourbrand.com |
curl -X POST https://weesify.com/api/v1/websites/01j…/domains \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"host":"\u2026"}'
POST/websites/{id}/domains/{item}/verifyCheck ownership, DNS and HTTPS now
Check ownership, DNS and HTTPS now. Skop: sites:write.
curl -X POST https://weesify.com/api/v1/websites/01j…/domains/01j…/verify \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"name":"\u2026"}'
DELETE/websites/{id}/domains/{item}Disconnect a custom domain
Disconnect a custom domain. Skop: sites:write.
curl -X DELETE https://weesify.com/api/v1/websites/01j…/domains/01j… \
-H "Authorization: Bearer wsy_…"
POST/websites/{id}/archiveReplace or update the working draft from a ZIP without publishing
Replace or update the working draft from a ZIP without publishing. Skop: sites:write.
| Badan | |
|---|---|
| archive * | multipart ZIP |
| replace | 1: the draft becomes exactly the ZIP; otherwise files are added or overwritten |
curl -X POST https://weesify.com/api/v1/websites/01j…/archive \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"archive":"\u2026"}'
GET/websites/{id}/archiveDownload the draft, the live site or one deployment as a ZIP
Download the draft, the live site or one deployment as a ZIP. Skop: sites:read.
| Pertanyaan | |
|---|---|
| source | draft (default), live or a deployment id |
curl -X GET https://weesify.com/api/v1/websites/01j…/archive \
-H "Authorization: Bearer wsy_…"
GET/websites/{id}/usageStorage, bandwidth, views, visits, form submissions and plan limits
Storage, bandwidth, views, visits, form submissions and plan limits. Skop: sites:read.
curl -X GET https://weesify.com/api/v1/websites/01j…/usage \
-H "Authorization: Bearer wsy_…"
Blog 3 endpoints
GET/blog/postsBlog posts, newest first (drafts included)
Blog posts, newest first (drafts included). Skop: blog:read.
| Pertanyaan | |
|---|---|
| status | draft, scheduled, published, archived |
| category_id | One category |
curl -X GET https://weesify.com/api/v1/blog/posts \
-H "Authorization: Bearer wsy_…"
GET/blog/posts/{id}One post, with its body
One post, with its body. Skop: blog:read.
curl -X GET https://weesify.com/api/v1/blog/posts/01j… \
-H "Authorization: Bearer wsy_…"
GET/blog/categoriesBlog categories
Blog categories. Skop: blog:read.
curl -X GET https://weesify.com/api/v1/blog/categories \
-H "Authorization: Bearer wsy_…"
Analitik 1 endpoint
GET/analytics/summaryViews and clicks per day, with top countries, referrers and devices
Views and clicks per day, with top countries, referrers and devices. Skop: analytics:read.
| Pertanyaan | |
|---|---|
| days | 1-90 (30) |
| subject | site, short_link or qr_code |
| subject_id | One of them |
curl -X GET https://weesify.com/api/v1/analytics/summary \
-H "Authorization: Bearer wsy_…"
Webhook 10 endpoints
GET/webhook-eventsEvery event an endpoint can ask for
Every event an endpoint can ask for. Skop: webhooks:read.
curl -X GET https://weesify.com/api/v1/webhook-events \
-H "Authorization: Bearer wsy_…"
GET/webhooksYour webhook, Slack and Discord endpoints
Your webhook, Slack and Discord endpoints. Skop: webhooks:read.
curl -X GET https://weesify.com/api/v1/webhooks \
-H "Authorization: Bearer wsy_…"
POST/webhooksAdd an endpoint; the signing secret is in this answer only
Add an endpoint; the signing secret is in this answer only. Skop: webhooks:write.
| Badan | |
|---|---|
| url * | https address on a host name (port 443) |
| events * | Event names, e.g. ["order.paid"] |
| kind | webhook (default), slack or discord |
| description | Only you see it |
curl -X POST https://weesify.com/api/v1/webhooks \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"url":"\u2026","events":"\u2026"}'
GET/webhooks/{id}One endpoint and its health
One endpoint and its health. Skop: webhooks:read.
curl -X GET https://weesify.com/api/v1/webhooks/01j… \
-H "Authorization: Bearer wsy_…"
PATCH/webhooks/{id}Change its events or description; active: false pauses it, active: true switches it back on
Change its events or description; active: false pauses it, active: true switches it back on. Skop: webhooks:write.
| Badan | |
|---|---|
| events | |
| description | |
| active | Boolean |
curl -X PATCH https://weesify.com/api/v1/webhooks/01j… \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"events":"\u2026"}'
DELETE/webhooks/{id}Remove an endpoint
Remove an endpoint. Skop: webhooks:write.
curl -X DELETE https://weesify.com/api/v1/webhooks/01j… \
-H "Authorization: Bearer wsy_…"
POST/webhooks/{id}/testSend a signed “ping” now and get the result
Send a signed “ping” now and get the result. Skop: webhooks:write.
curl -X POST https://weesify.com/api/v1/webhooks/01j…/test \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"name":"\u2026"}'
POST/webhooks/{id}/rotate-secretA new signing secret; the old one keeps signing alongside it for a day
A new signing secret; the old one keeps signing alongside it for a day. Skop: webhooks:write.
curl -X POST https://weesify.com/api/v1/webhooks/01j…/rotate-secret \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"name":"\u2026"}'
GET/webhooks/{id}/deliveriesIts delivery log (30 days), newest first
Its delivery log (30 days), newest first. Skop: webhooks:read.
| Pertanyaan | |
|---|---|
| status | pending, sending, delivered, failed, dead |
curl -X GET https://weesify.com/api/v1/webhooks/01j…/deliveries \
-H "Authorization: Bearer wsy_…"
POST/webhooks/{id}/deliveries/{item}/redeliverSend a delivery again (same event id)
Send a delivery again (same event id). Skop: webhooks:write.
curl -X POST https://weesify.com/api/v1/webhooks/01j…/deliveries/01j…/redeliver \
-H "Authorization: Bearer wsy_…" \
-H "Content-Type: application/json" \
-d '{"name":"\u2026"}'