Value-Added Services covers everything that happens on a shortcode :
subscribers text in, you reply, and they subscribe to premium content products
that bill on a recurring cycle.
VAS is mostly inbound
This is the one integration where we call you more than you call us .
The important half is the webhook you expose. Almost every flow starts with a
subscriber texting your shortcode, which arrives as an HTTP POST to your
server. If your webhook is down, your service is down — no amount of correct
outbound code compensates.
Build the receiver first.
They’re different products with different pipelines, and it’s worth being precise
about which one you’re using:
A2P SMS VAS / Two-Way Direction You → subscriber Subscriber → you → subscriber Sender Your brand name (9bits) Your shortcode (48974) Can they reply? No Yes — that’s the pointEndpoint /ng/v1/sendsms/vas/ng/v1/service/two-way/sendsmsBody format JSON form-encoded Message field contenttextBilling You pay per message Subscriber pays; you get revenue share
These two APIs are not interchangeable
A2P SMS takes JSON with a content field. Two-way takes
form-encoded input with a text field.
They are different services with different pipelines, and copying a payload from
one to the other will fail. See Receiving messages for the
exact shape.
A typical subscription
Subscriber texts games28 to your shortcode 48974.
We POST that to your webhook with a session_id.
You reply via POST /vas/ng/v1/service/two-way/sendsms, echoing the session_id.
The operator bills them and we POST you an activation_notification.
Every cycle, we POST a renewal_notification — this is your revenue event .
When they stop, we POST a deactivation_notification. Revoke access.
Inbound messages carry a session_id. Echo it back on your reply and we thread
the exchange as one conversation — which is what makes multi-step flows (menus,
quizzes, confirmations) work.
Try it live Run the reply endpoint against your account.