channels.sms.message, orchannels.sms.templateIdcustomerId, or with phone when customerId is omitted (find or create). Optionally pass bookingId when the template needs booking context. Use referenceId as an idempotency key (recommended in production).templateId values from GET /v1/workshops/{id}/templatessms.sent — top-level success matches SMS delivery (true only when sent)referenceId)referenceId for the same customer:| Prior result | Behaviour |
|---|---|
| Success | Returns previous result — no new send |
| Failed | Attempts delivery again — returns new outcome |
| Omitted | Every call is a new send |
429 when exceeded).200 with success: false means the request was valid but SMS was not delivered. HTTP 4xx means the request itself was rejected.| HTTP | errorCode | When |
|---|---|---|
| 400 | 000001 | Invalid body, missing SMS content, missing phone/customerId, or invalid template |
| 400 | 060001 | Booking exists but belongs to a different customer |
| 401 | 010000 | Missing or invalid OAuth token |
| 403 | 000003 | Feature unavailable |
| 403 | 000004 | Partner integration or inbox messaging disabled for the workshop |
| 404 | 030001 | Workshop not found |
| 404 | 040001 | Customer not found under this workshop |
| 404 | 060001 | Booking not found under this workshop |
| 429 | — | More than 5 requests/second for the same workshop and customer |