Send an SMS message
Sends an SMS message to a contact. Only the contact ID and message are required — the recipient phone, sender phone, and SMS provider are automatically resolved from the contact and playbook configuration. The recipient defaults to the contact phone on file. The sender is resolved from the playbook assigned phone number, then the SMS agent phone, then the first SMS-capable number. The provider follows the playbook-level override, then the tenant default, then Vonage. If an interactionId is provided, the message is appended to an existing conversation. Otherwise, the system finds or creates a conversation automatically.
Authorization
ApiKeyAuth API key generated from your Vayaflow dashboard Settings page
In: header
Request Body
application/json
The contact to send the SMS to
The SMS message body (1–1600 characters).
1 <= length <= 1600Override the recipient phone number (E.164 format). If omitted, uses the contact's phone on file.
Override the sender phone number. If omitted, auto-resolves from the playbook's assigned phone number.
The playbook this text is for. The contact must be active in it, and it must be live. If omitted, uses the contact's current playbook; a contact in no playbook is refused (NOT_IN_PLAYBOOK) unless they are texting with you in an open conversation.
Append to an existing SMS conversation. If omitted, a new conversation is created or an existing one is found automatically.
Response Body
application/json
application/json
application/json
application/json
package mainimport ( "fmt" "net/http" "io/ioutil" "strings")func main() { url := "https://api.vayaflow.com/api/v1/sms/send" body := strings.NewReader(`{ "contactId": "contact_abc123", "message": "Hi John, just following up on your inquiry." }`) req, _ := http.NewRequest("POST", url, body) req.Header.Add("Content-Type", "application/json") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := ioutil.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body))}{
"success": true,
"data": {
"messageId": "msg_abc123",
"status": "sent",
"interactionId": "int_abc123"
}
}{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid input data",
"details": [
"string"
]
}
}{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required"
}
}{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Resource not found"
}
}Initiate an AI voice call
Triggers an outbound AI voice call to a contact. The call is placed asynchronously and the response returns immediately with an interaction ID for tracking. Pre-flight validation checks that the contact exists with a valid E.164 phone number, the playbook is active with a voice agent configured, the contact is not on the Do Not Call list, and auto-dialer rules are satisfied (operating hours, min gap, max attempts). Use webhooks to receive call completion events, or poll the interaction for status updates.
Send a document
Sends one document template to a contact: an e-sign document (it has a signature field) or a form (no signature field). Each person on it gets their own link by email (and SMS when asked), in order. The finished copy saves on the contact under fileKey, and a document_completed event fires when everyone is done. Responds 409 when an open copy someone already started exists, unless replaceInProgress is true.