Weesify
المطوّرون

Weesify API

أنشئ الروابط ورموز QR، وحافظ على تزامن جهات الاتصال، واقرأ صفحات النبذة والنماذج والطلبات والدورات والحجوزات والفعاليات والتحليلات من شيفرتك البرمجية. JSON عبر HTTPS، الإصدار 1.

رموز مميّزة محدّدة الصلاحيات

قراءة أو كتابة لكل مورد. لا يستطيع الرمز المميّز فعل أكثر مما يستطيعه من أنشأه.

حدود واضحة

حدود للمعدّل لكل رمز مميّز ولكل خطة، تُعرض في الترويسات مع كل استجابة.

Webhooks موقّعة

HMAC-SHA256 مع ختم زمني، وإعادة محاولة تدريجية، وسجل تسليم يمكنك إعادة الإرسال منه.

OpenAPI 3.1

مستند واحد يُولَّد من المصدر نفسه الذي تُولَّد منه هذه الصفحة. استورده في أي عميل.

المصادقة

أنشئ رمزًا مميزًا في مساحة العمل ضمن الإعدادات ← المطورون (للمالكين والمسؤولين). يُعرض مرة واحدة فقط، لذا احفظه ضمن أسرار الخادم، ولا تضعه أبدًا في صفحة ويب أو تطبيق يُنزّله الناس. أرسله في ترويسة Authorization:

curl https://weesify.com/api/v1/workspace \
  -H "Authorization: Bearer wsy_your_token"

ينتمي الرمز المميز إلى مساحة عمل واحدة. في كل استدعاء، لا يمكنه سوى ما تسمح به نطاقاته وما لا يزال بإمكان منشئه فعله: إذا غادر أو تغيّر دوره، يتبعه الرمز. ألغِ الرمز في أي وقت؛ فيتوقف عن العمل فورًا.

هل تنتقل من Weesify API القديمة؟ يستمر مفتاح API القديم في العمل هنا كرمز Bearer لمدة 90 يومًا بعد الانتقال، بنفس صلاحيات API القديم. أنشئ رمزًا مميزًا جديدًا قبل ذلك؛ تعرض الإعدادات → المطورون موعد انتهاء مفتاحك القديم.

بداية سريعة

يصلح أي عميل HTTP. ثلاثة استدعاءات تغطي الأساسيات: القراءة، والإنشاء الآمن، والتحقق من حصتك.

# 1. أحدث روابطك
curl "https://weesify.com/api/v1/links?limit=5" \
  -H "Authorization: Bearer $WEESIFY_TOKEN"

# 2. أنشئ رابطًا (إعادة المحاولة بالمفتاح نفسه لا تنشئ رابطين)
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. اطّلع على ترويسات حدّ المعدّل
curl -i https://weesify.com/api/v1/workspace -H "Authorization: Bearer $WEESIFY_TOKEN"

كل استجابة بصيغة JSON. العنصر الواحد يأتي بصيغة {"data": {…}}، والقائمة بصيغة {"data": […], "meta": {…}}.

نطاقات الصلاحية

نطاق الصلاحيةيتيح للرمز المميز
links:readالروابط المختصرة وعدد نقراتها
links:writeإنشاء الروابط المختصرة وتغييرها وحذفها
qr:readرموز QR وعمليات مسحها
qr:writeإنشاء رموز QR وتغييرها وحذفها
contacts:readجهات الاتصال ووسومها وتفاصيلها
contacts:writeإضافة جهات الاتصال وتحديثها ووسمها وحذفها
forms:readالنماذج وما أرسله الناس
store:readالمنتجات والطلبات (مع بيانات المشترين)
sites:readYour pages, HTML websites, their files, deployments, domains and usage
sites:writeCreate HTML websites, upload and change files, settings and custom domains
sites:deployPublish HTML websites and roll them back
analytics:readالنقرات والمشاهدات بمرور الوقت
events:readالفعاليات والتواريخ وأنواع التذاكر وجدول الأعمال والمتحدثون والرعاة والعارضون والأماكن
events:writeأنشئ الفعاليات وغيّرها وانقلها عبر مراحلها
events:attendeesالتسجيلات والحاضرون والتذاكر وطلبات التذاكر (مع بيانات الأشخاص)
events:checkinمسح التذاكر وقراءة تسجيلات الحضور
bookings:readBookable services and bookings (with people’s details)
courses:readCourses and their students’ enrolments and progress
webhooks:readWebhook endpoints and their delivery log
webhooks:writeAdd, change, test and remove webhook endpoints, and send deliveries again
blog:readBlog posts (drafts included) and categories

الطلبات والصفحات

  • أرسل أجسام JSON مع Content-Type: application/json. الأوقات بصيغة ISO 8601 بتوقيت UTC. المعرّفات سلاسل من 26 حرفًا.
  • تأتي القوائم بالأحدث أولًا بصيغة {"data": [...], "meta": {"limit": 25, "next_cursor": "…"}}. مرّر ?cursor= للحصول على الصفحة التالية و?limit= (1–100، الافتراضي 25).
  • تُحسب المبالغ بأصغر وحدة (سنتات) مع عملتها.

الأخطاء

تستخدم الأخطاء RFC 7807 ‏(application/problem+json). تسرد أخطاء التحقق كل حقل ضمن errors.

{
  "type": "https://weesify.com/developers#errors",
  "title": "Invalid request",
  "status": 422,
  "detail": "Some fields need attention.",
  "errors": { "destination_url": ["Enter a web address."] }
}
الحالةيعني
401لا يوجد رمز، أو أنه خاطئ أو منتهي الصلاحية أو ملغى
402مساحة العمل للقراءة فقط إلى أن تختار خطة، أو إلى أن يُبلغ حدّ الخطة
403الرمز المميّز لا يملك الصلاحية، أو أن من أنشأه لا يستطيع تنفيذ هذا، أو أن الوصول إلى API غير متاح في الخطة
404غير موجود في مساحة العمل هذه، أو أن هذه الميزة متوقفة
400Idempotency-Key ليس بالصيغة الصحيحة
409لا يزال مفتاح Idempotency-Key نفسه قيد المعالجة، أو استُخدم لطلب مختلف
422هناك خطأ ما في الطلب
429طلبات كثيرة جدًا: انتظر عدد ثوانٍ يساوي Retry-After

حدود المعدل

يمكن لكل رمز مميّز تنفيذ 120 طلبًا في الدقيقة، ولكل مساحة عمل 600، وتُحتسب في نوافذ مدة كل منها دقيقة. تتيح خطتا Enterprise وCustom حدودًا أعلى. عند تجاوز الحد تصلك استجابة 429 مع Retry-After: انتظر هذا العدد من الثواني ثم حاول مجددًا.

الترويسةيعني
X-RateLimit-LimitRequests a minute this token may make
X-RateLimit-RemainingRequests left this minute
X-RateLimit-ResetUnix time when the minute resets
RateLimitIETF form: limit, remaining, reset (seconds)
RateLimit-PolicyThe policy, e.g. 120;w=60
X-Request-IdThis request’s id, as shown in your request log

سجل طلبات مساحة عملك واستخدامك مقابل خطتك في الإعدادات ← المطوّرون ← الاستخدام والسجلات، مطابقًا بحسب X-Request-Id.

إعادة المحاولات

أرسل ترويسة Idempotency-Key (من 1 إلى 80 حرفًا أو رقمًا أو شرطة أو نقطة أو نقطتين رأسيتين أو شرطة سفلية) مع طلب POST. إذا انقطعت الشبكة وأعدت المحاولة بالمفتاح نفسه والمسار نفسه والمحتوى نفسه خلال 24 ساعة، فستحصل على الاستجابة الأصلية مجددًا (موسومة بـ Idempotent-Replayed: true) ولن يُنفَّذ شيء مرتين. المفاتيح تخصّ الرمز المميّز الذي أرسلها. أما المفتاح نفسه مع مسار أو محتوى آخر فيُرجع 409.

Weesify CLI

انشر مجلدًا إلى موقع HTML من حاسوبك أو من CI، واسحبه مجددًا، وقارن، وتراجع. ملف Node.js 18+ واحد بلا حزم: نزّله وشغّله.

curl -fsSLo weesify.mjs https://weesify.com/developers/cli/weesify.mjs && node weesify.mjs login
node weesify.mjs init
node weesify.mjs deploy -m "الإصدار الأول"

SHA-256 للملف الحالي: e98494277685934e20bdfb05c7f9fe5087db5db66d80b2365a4d3f74ed51c8af

التثبيت على macOS وLinux وWindows، وجميع الأوامر، وCI، ورموز الخروج →

Webhooks

أضف نقطة نهاية في الإعدادات ← المطوّرون ← Webhooks (أو عبر POST /webhooks) واختر الأحداث. يرسل Weesify بيانات JSON إليها عند وقوع الأحداث، ويعيد المحاولة عند الفشل 6 مرات خلال نحو 21 ساعة، ويحتفظ بسجل تسليم لمدة 30 يومًا يمكنك الإرسال منه مجددًا. بعد تعذّر تسليم 5 أحداث متتالية تُوقَف نقطة النهاية ويُبلَّغ مسؤولو مساحة العمل. أجب بأي رمز 2xx خلال 5 ثوانٍ؛ ولا تُتبع إعادات التوجيه.

{
  "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" }
  }
}

تحقق من التوقيع. ترويسة X-Weesify-Signature هي t=<unix time>,v1=<hex>. احسب HMAC-SHA256 لـ t + "." + raw body باستخدام سر التوقيع الخاص بنقطة النهاية وقارنه (في زمن ثابت) مع أي v1: لمدة يوم بعد تدوير السر يوجد اثنان. ارفض أي شيء أقدم من خمس دقائق. يبقى id الحدث كما هو عند إعادة المحاولة، لذا يمكنك تجاهل التكرارات.

// 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;
}
الفعاليةمتى
contact.createdجهة اتصال جديدة
contact.updatedتغيّرت بيانات التواصل
contact.subscribedمشترك
contact.unsubscribedألغى الاشتراك
contact.taggedتمت إضافة وسم
contact.untaggedتمت إزالة وسم
contact.stage_changedتغيّرت المرحلة
form.submittedتمت الإجابة على النموذج
order.paidتم دفع الطلب
order.refundedتم استرداد الطلب
booking.createdحجز جديد
booking.cancelledتم إلغاء الحجز
course.enrolledالتحق طالب
course.completedاكتملت الدورة
community.joinedانضم إلى مجتمع
event.createdتم إنشاء الفعالية
event.publishedتم نشر الفعالية
event.updatedتغيّرت تفاصيل الفعالية
event.cancelledأُلغيت الفعالية
event.postponedتأجّلت الفعالية
event.completedاكتملت الفعالية
registration.createdبدأ التسجيل
registration.confirmedتم تأكيد التسجيل
registration.cancelledتم إلغاء التسجيل
ticket.purchasedتم شراء تذكرة
payment.completedاكتمل دفع التذكرة
payment.failedفشل دفع التذكرة
ticket.refundedتم استرداد التذكرة
attendee.checked_inتم تسجيل حضور الحاضر
session.attendedحضر الجلسة
waitlist.joinedانضم إلى قائمة انتظار
feedback.submittedتم إرسال الملاحظات
post.publishedPost published
post.failedPost failed to publish
site.deployedWebsite published
site.deploy_failedWebsite failed to publish

مساحة العمل 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_…"

رموز QR 5 endpoints

GET/qr-codesList QR codes

List QR codes. النطاق: qr:read.

الاستعلام
campaignOnly 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. النطاق: qr:write.

المتن
name *
typedynamic (default), url, text, email, phone, sms, wifi, vcard…
target{type: short_link|site, id} for dynamic codes
payloadContent for static types, e.g. {url}
campaign
placementWhere 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. النطاق: 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. النطاق: qr:write.

المتن
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. النطاق: qr:write.

curl -X DELETE https://weesify.com/api/v1/qr-codes/01j… \
  -H "Authorization: Bearer wsy_…"

جهات الاتصال 8 endpoints

GET/contactsList contacts

List contacts. النطاق: contacts:read.

الاستعلام
emailExact address
tagA tag id
updated_sinceISO 8601
curl -X GET https://weesify.com/api/v1/contacts \
  -H "Authorization: Bearer wsy_…"
POST/contactsAdd a contact

Add a contact. النطاق: contacts:write.

المتن
email *
name
phone
company
stagesubscriber, lead, customer, student, member
subscribedtrue only with the person’s consent (it is recorded)
tagsTag names
fieldsCustom 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. النطاق: 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. النطاق: contacts:write.

المتن
email
name
stage
subscribedfalse 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. النطاق: 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. النطاق: contacts:write.

المتن
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. النطاق: contacts:write.

curl -X DELETE https://weesify.com/api/v1/contacts/01j…/tags/01j… \
  -H "Authorization: Bearer wsy_…"
GET/tagsList tags

List tags. النطاق: contacts:read.

curl -X GET https://weesify.com/api/v1/tags \
  -H "Authorization: Bearer wsy_…"

النماذج 3 endpoints

GET/formsList forms

List forms. النطاق: forms:read.

curl -X GET https://weesify.com/api/v1/forms \
  -H "Authorization: Bearer wsy_…"
GET/forms/{id}One form

One form. النطاق: 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. النطاق: forms:read.

الاستعلام
sinceISO 8601
curl -X GET https://weesify.com/api/v1/forms/01j…/submissions \
  -H "Authorization: Bearer wsy_…"

المتجر 4 endpoints

GET/productsList products

List products. النطاق: store:read.

curl -X GET https://weesify.com/api/v1/products \
  -H "Authorization: Bearer wsy_…"
GET/products/{id}One product

One product. النطاق: 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. النطاق: store:read.

الاستعلام
statuspaid, pending, failed, refunded, cancelled
sinceISO 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. النطاق: store:read.

curl -X GET https://weesify.com/api/v1/orders/01j… \
  -H "Authorization: Bearer wsy_…"

صفحات التعريف والمواقع 2 endpoints

GET/sitesList bio pages and sites

List bio pages and sites. النطاق: 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. النطاق: sites:read.

curl -X GET https://weesify.com/api/v1/sites/01j… \
  -H "Authorization: Bearer wsy_…"

الفعاليات 23 endpoints

GET/eventsList events, newest first

List events, newest first. النطاق: events:read.

الاستعلام
statusdraft, published, registration_open, …
starts_afterISO 8601
qName 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. النطاق: events:write.

المتن
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
formatin_person, virtual or hybrid
visibilitypublic, unlisted, private
registration_modeopen, approval, rsvp, invite, external, none
capacityInteger
currencyISO 4217
typeAn event type key
venue_idOne 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. النطاق: 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). النطاق: events:write.

المتن
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. النطاق: events:write.

المتن
status *published, registration_open, registration_closed, postponed, cancelled, …
reasonFor 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. النطاق: events:read.

الاستعلام
upcoming1 = 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). النطاق: 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. النطاق: events:attendees.

الاستعلام
statusconfirmed, pending, cancelled, refunded…
emailExact 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). النطاق: events:attendees + events:write.

المتن
tickets *{ticket_type_id: quantity}
email *
name
occurrence_idFor multi-date events
attendees[{name, email}] one per ticket
codePromo or access code
answersRegistration 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. النطاق: 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. النطاق: events:attendees.

الاستعلام
statusconfirmed, pending, cancelled…
occurrence_id
checked_in1
curl -X GET https://weesify.com/api/v1/events/01j…/attendees \
  -H "Authorization: Bearer wsy_…"
GET/events/{id}/attendees/{item}One attendee

One attendee. النطاق: 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). النطاق: events:attendees.

الاستعلام
statusvalid or void
numberWSY-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). النطاق: events:attendees (+ events.finance role).

الاستعلام
statuspaid, 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. النطاق: 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). النطاق: events:read.

curl -X GET https://weesify.com/api/v1/events/01j…/speakers \
  -H "Authorization: Bearer wsy_…"
GET/events/{id}/sponsorsSponsors

Sponsors. النطاق: events:read.

curl -X GET https://weesify.com/api/v1/events/01j…/sponsors \
  -H "Authorization: Bearer wsy_…"
GET/events/{id}/exhibitorsExhibitors

Exhibitors. النطاق: 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. النطاق: events:checkin.

الاستعلام
resultaccepted, 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). النطاق: events:checkin.

المتن
payload *The QR text, WT1.…
client_uuidUUID from your device
directionin 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. النطاق: events:checkin.

curl -X GET https://weesify.com/api/v1/events/01j…/check-ins/01j… \
  -H "Authorization: Bearer wsy_…"
GET/venuesYour venues

Your venues. النطاق: events:read.

curl -X GET https://weesify.com/api/v1/venues \
  -H "Authorization: Bearer wsy_…"
GET/venues/{id}One venue

One venue. النطاق: 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). النطاق: 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). النطاق: bookings:read.

الاستعلام
statusheld, pending, confirmed, in_progress, cancelled, attended, no_show
service_idOne service
starts_afterISO 8601
starts_beforeISO 8601
curl -X GET https://weesify.com/api/v1/bookings \
  -H "Authorization: Bearer wsy_…"
GET/bookings/{id}One booking

One booking. النطاق: bookings:read.

curl -X GET https://weesify.com/api/v1/bookings/01j… \
  -H "Authorization: Bearer wsy_…"

الدورات 4 endpoints

GET/coursesCourses, with lesson and student counts

Courses, with lesson and student counts. النطاق: courses:read.

curl -X GET https://weesify.com/api/v1/courses \
  -H "Authorization: Bearer wsy_…"
GET/courses/{id}One course

One course. النطاق: 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). النطاق: courses:read.

الاستعلام
statusactive or revoked
completed1 = 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. النطاق: courses:read.

curl -X GET https://weesify.com/api/v1/enrollments/01j… \
  -H "Authorization: Bearer wsy_…"

المواقع 20 endpoints

GET/websitesList HTML websites, newest first

List HTML websites, newest first. النطاق: sites:read.

الاستعلام
statusdraft, 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. النطاق: sites:write.

المتن
name *Up to 120 characters
slugIts 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. النطاق: 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. النطاق: sites:write.

المتن
name
slugNew weesify.com/{slug}/ address; the old one redirects
homepageA 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. النطاق: 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. النطاق: sites:read.

الاستعلام
sourcedraft (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. النطاق: sites:write.

المتن
files *multipart files[]
pathsmultipart paths[]: each file’s relative path
dirFolder 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). النطاق: 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. النطاق: 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. النطاق: sites:deploy.

المتن
messageShown in the deployment history
archivemultipart ZIP (also needs sites:write)
replaceWith 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. النطاق: 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). النطاق: 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. النطاق: sites:deploy.

المتن
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. النطاق: 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). النطاق: sites:write.

المتن
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. النطاق: 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. النطاق: 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. النطاق: sites:write.

المتن
archive *multipart ZIP
replace1: 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. النطاق: sites:read.

الاستعلام
sourcedraft (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. النطاق: sites:read.

curl -X GET https://weesify.com/api/v1/websites/01j…/usage \
  -H "Authorization: Bearer wsy_…"

المدونة 3 endpoints

GET/blog/postsBlog posts, newest first (drafts included)

Blog posts, newest first (drafts included). النطاق: blog:read.

الاستعلام
statusdraft, scheduled, published, archived
category_idOne 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. النطاق: blog:read.

curl -X GET https://weesify.com/api/v1/blog/posts/01j… \
  -H "Authorization: Bearer wsy_…"
GET/blog/categoriesBlog categories

Blog categories. النطاق: blog:read.

curl -X GET https://weesify.com/api/v1/blog/categories \
  -H "Authorization: Bearer wsy_…"

التحليلات 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. النطاق: analytics:read.

الاستعلام
days1-90 (30)
subjectsite, short_link or qr_code
subject_idOne of them
curl -X GET https://weesify.com/api/v1/analytics/summary \
  -H "Authorization: Bearer wsy_…"

Webhooks 10 endpoints

GET/webhook-eventsEvery event an endpoint can ask for

Every event an endpoint can ask for. النطاق: 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. النطاق: 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. النطاق: webhooks:write.

المتن
url *https address on a host name (port 443)
events *Event names, e.g. ["order.paid"]
kindwebhook (default), slack or discord
descriptionOnly 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. النطاق: 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. النطاق: webhooks:write.

المتن
events
description
activeBoolean
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. النطاق: 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. النطاق: 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. النطاق: 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. النطاق: webhooks:read.

الاستعلام
statuspending, 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). النطاق: 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"}'