Failures and limits
An error carries StatusName ≠ REQUEST_ACCEPTED plus ErrorReasonName (machine code) and ErrorDescription (explanation). The HTTP status stays 200 — except for the two cases below.
ErrorReasonName codes
| Code | When | How to reproduce |
|---|---|---|
InvalidSubscriberMsisdn | The number is not in 7XXXXXXXXXX format | Send a 5-digit Subscriber_MSISDN |
SubscriberMustBeSpecified | Neither a number, nor ClientIP, nor CustomerType=Card | CreateSubscription with no customer fields |
SubscriptionAlreadyCreated | The subscriber already has a live subscription in this project | Repeat CreateSubscription with the same number |
SubscriberNotSupported | The subscriber’s operator has no billing rules | A number ending with 0001 |
SubscriberInBlacklist | The number is blacklisted | A number ending with 0002 |
ClientIPMSISDNCountryNotEqual | Countries by number and by IP do not match | A number ending with 0003 together with ClientIP |
InvalidClientIP | ClientIP does not parse as an IP address | <ClientIP>not-an-ip</ClientIP> |
InvalidPinCode | Wrong PIN; the description carries the attempts left | ApproveSubscription with a PIN other than 1234 |
ExceededSubscriptionApprovingAttempts | Three wrong PINs in a row, or the 3-hour window expired | Send a wrong PIN three times |
SubscriptionAlreadyApproved | The subscription is already confirmed | Repeat ApproveSubscription |
On SubscriptionAlreadyCreated the SubscriptionID of the existing subscription is printed in ErrorDescription — so you can continue the scenario instead of creating a second one. To run it from scratch, use another number or call CancelSubscription first.
HTTP statuses
| Status | When |
|---|---|
400 | The body does not parse as XML or is empty — the spec has the platform answer 400 Bad request |
503 | A rate limit was hit (below). The body carries StatusName=SERVICE_UNAVAILABLE |
200 | Everything else, including signature and parameter errors |
Rate limits
| Counter | Thresholds | Methods |
|---|---|---|
ClientIP | 50 per 10 min, 200 per 60 min | all |
Subscriber_MSISDN | 6 per 2 min, 10 per 20 min | CreateSubscription, CancelSubscription |
SubscriptionProjectID | 1000 per 1 min, 3000 per 5 min | all |
The thresholds are the production ones. Counters are independent: hitting the limit for one number does not block the other subscribers of the project.
Error response
<Response>
<StatusName>WRONG_PARAMS</StatusName>
<ErrorReasonName>SubscriptionAlreadyCreated</ErrorReasonName>
<ErrorDescription>Subscription already exists: SubscriptionID=10000001, status=Active</ErrorDescription>
</Response>Sandbox
Failure by number
# a number ending with 0002 — blacklisted
<Subscriber_MSISDN>79001230002</Subscriber_MSISDN>
<Response>
<StatusName>WRONG_PARAMS</StatusName>
<ErrorReasonName>SubscriberInBlacklist</ErrorReasonName>
</Response>Rate limit hit
HTTP/1.1 503 Service Unavailable
<Response>
<StatusName>SERVICE_UNAVAILABLE</StatusName>
<ErrorDescription>msisdn:79001234567 exceeded 6 requests per 2 min</ErrorDescription>
</Response>