ACloud SMS API

רפרנס API

API צד־שרת לניהול מספרי SMS וירטואליים: קבלת הודעות, צפייה במספרים, ניהול שולחים, בדיקת קרדיטים ושליחת SMS.

Base URLhttps://app.aharon.cloud/api/v1AuthBearer tokenFormatJSON

התחלה מהירה

משתמשים במפתח גישה מסוג server מתוך הגדרות החשבון. אין לחשוף את המפתח בקוד צד־לקוח.

curl \
  --request GET \
  --url "https://app.aharon.cloud/api/v1/messages" \
  --header "Authorization: Bearer ACCESS_KEY_HERE" \
  --header "Accept: application/json"

אימות

HeaderAuthorization
ValueBearer ACCESS_KEY_HERE
Token typeserver
Failure401 missing_bearer_token / 401 invalid_token

מודל תגובה

הצלחה

{
  "ok": true
}

שגיאה

{
  "ok": false,
  "error": "invalid_token",
  "message": "Bad request"
}
StatusErrorמשמעות
400bad_request, missing_senderקלט לא תקין או שדה חסר.
401missing_bearer_token, invalid_tokenהמפתח חסר, בוטל או אינו תקין.
402insufficient_creditsאין מספיק קרדיטים לשליחה.
423sms_sending_closed_weekendשליחה סגורה בחלון סוף השבוע שהוגדר.
429too_many_recipientsיותר מדי נמענים או מגבלת קצב.
502provider_send_failedספק השליחה החזיר כישלון.
503sms_sending_not_enabledשליחה לא פעילה.
GET

/me

מחזיר את החשבון המאומת ואת יתרת הקרדיטים הנוכחית.

{
  "ok": true,
  "user": {
    "id": 123,
    "email": "customer@example.com",
    "token_id": 77,
    "token_type": "server",
    "sms_credits": 1000
  }
}
GET

/numbers

מציג מספרים וירטואליים שמשויכים לחשבון המאומת.

{
  "ok": true,
  "numbers": [
    {
      "id": 12,
      "number_raw": "0500000000",
      "label": "Main",
      "status": "assigned"
    }
  ]
}
GET

/messages

מחזיר עד limit הודעות נכנסות בסדר מזהה עולה. השתמשו ב־after_id כדי לקבל רק הודעות עם מזהה גבוה יותר.

שאילתהRequiredהערות
limitNoמספר שלם בין 1 ל־250. ברירת מחדל: 100.
after_idNoמחזיר רק הודעות שהמזהה שלהן גדול ממספר שלם חיובי זה.
virtual_number_idNoמסנן הודעות לפי מזהה מספר וירטואלי משויך.
שדהTypeתיאור
idnumberמזהה הודעה.
virtual_number_idnumberמזהה המספר שקיבל את ההודעה.
from_rawstringהשולח המקורי.
to_rawstringמספר היעד.
bodystringתוכן ההודעה.
provider_received_atdatetimeזמן קבלה אצל הספק.
first_seen_atdatetimeזמן הייבוא הראשון ל־ACloud.

ערכי תאריך ושעה נשלחים בפורמט YYYY-MM-DD HH:mm:ss ללא היסט מספרי, ומייצגים את אזור הזמן Asia/Jerusalem.

{
  "ok": true,
  "messages": [
    {
      "id": 991,
      "virtual_number_id": 12,
      "from_raw": "Google",
      "from_normalized": "Google",
      "from_type": "text",
      "to_raw": "0500000000",
      "body": "Your code is 123456",
      "provider_received_at": "2026-07-05 13:45:00",
      "first_seen_at": "2026-07-05 13:45:02"
    }
  ],
  "pagination": {
    "limit": 100,
    "count": 1,
    "after_id": null,
    "next_after_id": 991,
    "has_more": false
  }
}
GET

/messages/{id}

מחזיר הודעה אחת לפי מזהה, רק אם היא שייכת לחשבון המאומת.

Pathid — מזהה הודעה חובה.
{
  "ok": true,
  "message": {
    "id": 991,
    "virtual_number_id": 12,
    "from_raw": "Google",
    "body": "Your code is 123456"
  }
}
{
  "ok": false,
  "error": "not_found"
}
GET

/sms/credits

מחזיר את יתרת הקרדיטים הנוכחית לשליחת SMS.

{
  "ok": true,
  "sms_credits": 1000
}
POST

/senders/state

מסמן שולח כספאם או כחסום.

BodyRequiredהערות
sender / fromYesמזהה השולח.
stateNospam / blocked. כאשר השדה חסר, ברירת המחדל היא spam.
virtual_number_idNoשיוך אופציונלי למספר.
{
  "sender": "0520000000",
  "state": "spam",
  "virtual_number_id": 12
}
{
  "ok": true,
  "state": "spam",
  "result": {
    "state": "spam"
  }
}
POST

/senders/block

נקודת קיצור לחסימת שולח.

{
  "sender": "0520000000",
  "virtual_number_id": 12
}
{
  "ok": true,
  "blocked": true,
  "result": {
    "state": "blocked"
  }
}
POST

/sms/send

שולח SMS ממספר וירטואלי משויך. החיוב מחושב לפי נמענים ומקטעי הודעה.

BodyRequiredהערות
fromYesמספר שולח משויך.
messageYesטקסט הודעה.
phones / toYesנמענים מופרדים בנקודתיים, פסיק או שורה חדשה.
flashNoבוליאני: flash/sendFlashMessage/send_flash.
curl \
  --request POST \
  --url "https://app.aharon.cloud/api/v1/sms/send" \
  --header "Authorization: Bearer ACCESS_KEY_HERE" \
  --header "Content-Type: application/json" \
  --data '{
    "from": "0500000000",
    "to": "0520000000",
    "message": "Your code is 123456"
  }'
{
  "ok": true,
  "sms": {
    "outbound_message_id": 456,
    "provider_status": "OK",
    "recipients_count": 1,
    "segments": 1,
    "credits_used": 1,
    "balance_after": 999,
    "flash": false
  }
}

Webhook

Webhook להודעות נכנסות נרשם ידנית לכל מספר. ACloud אינו חושף נקודות API לרישום או למחיקה של Webhook.

  1. צרו Custom webhook ב־Make והעתיקו את כתובת ה־HTTPS הציבורית שלו.
  2. ב־ACloud פתחו מספרים, בחרו את המספר המקבל ופתחו Webhook.
  3. הדביקו את כתובת Make בשדה כתובת Webhook ושמרו.

אין בורר אירועים. ACloud שולח את האירוע sms.received עבור כל הודעת SMS נכנסת.

{
  "event": "sms.received",
  "message_id": "msg_991",
  "number_id": "num_12",
  "to": "0500000000",
  "from": "Google",
  "from_type": "text",
  "body": "Your code is 123456",
  "received_at": "2026-07-05 13:45:00"
}

השדה received_at נשלח בפורמט YYYY-MM-DD HH:mm:ss ללא היסט מספרי ומייצג את אזור הזמן Asia/Jerusalem.

X-SMS-Timestamp: 1782395100
X-SMS-Signature: sha256=...
HMAC_SHA256(webhook_secret, timestamp + "." + rawBody)

דוגמאות

curl

curl \
  --request GET \
  --url "https://app.aharon.cloud/api/v1/messages" \
  --header "Authorization: Bearer ACCESS_KEY_HERE" \
  --header "Accept: application/json"

Node.js

const response = await fetch('https://app.aharon.cloud/api/v1/messages', {
  method: 'GET',
  headers: {
    Authorization: 'Bearer ACCESS_KEY_HERE',
    Accept: 'application/json'
  }
});

const data = await response.json();
console.log(data);

Python

import requests

response = requests.get(
    'https://app.aharon.cloud/api/v1/messages',
    headers={
        'Authorization': 'Bearer ACCESS_KEY_HERE',
        'Accept': 'application/json'
    },
    timeout=20
)

print(response.json())