Weesify API
أنشئ الروابط ورموز QR، وحافظ على تزامن جهات الاتصال، واقرأ صفحات النبذة والنماذج والطلبات والدورات والحجوزات والفعاليات والتحليلات من شيفرتك البرمجية. JSON عبر HTTPS، الإصدار 1.
قراءة أو كتابة لكل مورد. لا يستطيع الرمز المميّز فعل أكثر مما يستطيعه من أنشأه.
حدود للمعدّل لكل رمز مميّز ولكل خطة، تُعرض في الترويسات مع كل استجابة.
HMAC-SHA256 مع ختم زمني، وإعادة محاولة تدريجية، وسجل تسليم يمكنك إعادة الإرسال منه.
مستند واحد يُولَّد من المصدر نفسه الذي تُولَّد منه هذه الصفحة. استورده في أي عميل.
المصادقة
أنشئ رمزًا مميزًا في مساحة العمل ضمن الإعدادات ← المطورون (للمالكين والمسؤولين). يُعرض مرة واحدة فقط، لذا احفظه ضمن أسرار الخادم، ولا تضعه أبدًا في صفحة ويب أو تطبيق يُنزّله الناس. أرسله في ترويسة 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: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 | النقرات والمشاهدات بمرور الوقت |
| events:read | الفعاليات والتواريخ وأنواع التذاكر وجدول الأعمال والمتحدثون والرعاة والعارضون والأماكن |
| events:write | أنشئ الفعاليات وغيّرها وانقلها عبر مراحلها |
| events:attendees | التسجيلات والحاضرون والتذاكر وطلبات التذاكر (مع بيانات الأشخاص) |
| events:checkin | مسح التذاكر وقراءة تسجيلات الحضور |
| 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 |
الطلبات والصفحات
- أرسل أجسام 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 | غير موجود في مساحة العمل هذه، أو أن هذه الميزة متوقفة |
| 400 | Idempotency-Key ليس بالصيغة الصحيحة |
| 409 | لا يزال مفتاح Idempotency-Key نفسه قيد المعالجة، أو استُخدم لطلب مختلف |
| 422 | هناك خطأ ما في الطلب |
| 429 | طلبات كثيرة جدًا: انتظر عدد ثوانٍ يساوي Retry-After |
حدود المعدل
يمكن لكل رمز مميّز تنفيذ 120 طلبًا في الدقيقة، ولكل مساحة عمل 600، وتُحتسب في نوافذ مدة كل منها دقيقة. تتيح خطتا Enterprise وCustom حدودًا أعلى. عند تجاوز الحد تصلك استجابة 429 مع Retry-After: انتظر هذا العدد من الثواني ثم حاول مجددًا.
| الترويسة | يعني |
|---|---|
| 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 |
سجل طلبات مساحة عملك واستخدامك مقابل خطتك في الإعدادات ← المطوّرون ← الاستخدام والسجلات، مطابقًا بحسب 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.published | Post published |
| post.failed | Post failed to publish |
| site.deployed | Website published |
| site.deploy_failed | Website 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_…"
الروابط 6 endpoints
GET/linksList short links, newest first
List short links, newest first. النطاق: links:read.
| الاستعلام | |
|---|---|
| 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. النطاق: links:write.
| المتن | |
|---|---|
| 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. النطاق: 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. النطاق: links:write.
| المتن | |
|---|---|
| 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). النطاق: 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. النطاق: links:read + analytics:read.
| الاستعلام | |
|---|---|
| days | 7-90 (30) |
curl -X GET https://weesify.com/api/v1/links/01j…/stats \
-H "Authorization: Bearer wsy_…"
رموز QR 5 endpoints
GET/qr-codesList QR codes
List QR codes. النطاق: qr:read.
| الاستعلام | |
|---|---|
| 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. النطاق: qr:write.
| المتن | |
|---|---|
| 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. النطاق: 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.
| الاستعلام | |
|---|---|
| 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. النطاق: contacts:write.
| المتن | |
|---|---|
| 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. النطاق: 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.
| المتن | |
|---|---|
| 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. النطاق: 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.
| الاستعلام | |
|---|---|
| since | ISO 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.
| الاستعلام | |
|---|---|
| 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. النطاق: 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.
| الاستعلام | |
|---|---|
| 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. النطاق: 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 |
| 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. النطاق: 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, … |
| 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. النطاق: events:read.
| الاستعلام | |
|---|---|
| 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). النطاق: 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.
| الاستعلام | |
|---|---|
| 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). النطاق: events:attendees + events:write.
| المتن | |
|---|---|
| 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. النطاق: 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.
| الاستعلام | |
|---|---|
| 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. النطاق: 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.
| الاستعلام | |
|---|---|
| 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). النطاق: events:attendees (+ events.finance role).
| الاستعلام | |
|---|---|
| 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. النطاق: 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.
| الاستعلام | |
|---|---|
| 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). النطاق: events:checkin.
| المتن | |
|---|---|
| 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. النطاق: 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.
| الاستعلام | |
|---|---|
| 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. النطاق: 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.
| الاستعلام | |
|---|---|
| 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. النطاق: 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.
| الاستعلام | |
|---|---|
| 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. النطاق: sites:write.
| المتن | |
|---|---|
| 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. النطاق: 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 | |
| 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. النطاق: 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.
| الاستعلام | |
|---|---|
| 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. النطاق: sites:write.
| المتن | |
|---|---|
| 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). النطاق: 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.
| المتن | |
|---|---|
| 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. النطاق: 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 |
| 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. النطاق: sites:read.
| الاستعلام | |
|---|---|
| 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. النطاق: 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.
| الاستعلام | |
|---|---|
| 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. النطاق: 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.
| الاستعلام | |
|---|---|
| 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_…"
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"] |
| 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. النطاق: 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 | |
| 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. النطاق: 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.
| الاستعلام | |
|---|---|
| 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). النطاق: 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"}'