Ringless voicemail

POST /rvm delivers a voicemail directly to one person's voicemail box. The recipient fields, foreign_id, callback_url and merge fields work the same on every send; see Sending basics.

A 202 means accepted, not delivered. The result of each voicemail arrives on the contact.rvm.status webhook. Calling hours, the contact frequency limit and retries are explained in Send lifecycle. What each reason_code means, and what to do about it, is in Outcomes and what to do.

Send a ringless voicemail

POST /rvm. With OAuth, the token needs the rvm:send scope. Give the audio as exactly one of these:

Field Type Required Description
media_id string One audio option An uploaded or recorded file. List yours with GET /media/public/media.
tts_body string One audio option Text to speak, up to 1,200 characters once merge fields are filled in. Needs voice_id. Supports merge fields.
voice_id string With tts_body The voice for tts_body. List voices with GET /voice/public/voices.
audio_url string One audio option A public http(s) URL of an mp3 or wav file, up to 50 MB. We fetch it when the voicemail is sent.

audio_url works on BYOC accounts and on accounts set up to send unreviewed audio. On other accounts the send fails with 3014 (Not allowed audio_url). Upload the file to Media and send its media_id instead.

Then choose the phone line and options:

Field Type Required Description
phone_line_id string No The phone line the voicemail is sent from. The recipient sees one of its numbers, and return calls and texts reach that line, where its routing applies: forward, queue, voicemail or whatever you set up. Leave it out to send from your default phone line. List lines with GET /phone/public/lines.
caller_id string BYOC only Your carrier's number in E.164, shown as the caller ID exactly as given. Only bring-your-own-carrier (BYOC) accounts can set it; on other accounts it's ignored. If you send phone_line_id too, the line wins.
mobile_only boolean No Skip the send when the number isn't a mobile number.

Every voicemail goes out from a phone line on your account unless you use BYOC. If you leave out phone_line_id and your account has no default phone line, the send fails with 4010.

curl -X POST https://api-v2.dropcowboy.com/rvm \
  -H "x-key: $DC_KEY" -H "x-secret: $DC_SECRET" \
  -H "Idempotency-Key: 6f1c2e9a-8b3d-4f7a-a2c5-9d4e1b7f3a60" \
  -H "Content-Type: application/json" \
  -d '{
    "contact_id": "5a4b3c2d-1e0f-4a9b-8c7d-6e5f4a3b2c1d",
    "phone_selector": "mobile_phone",
    "phone_line_id": "e2b6f9a3-5c1d-4e8b-a4f7-9c3e1b5d7a28",
    "voice_id": "7d2a9e4b-1c6f-4b3a-8e5d-2f9c7a1b4e63",
    "tts_body": "Hi {{contact.first_name|there}}, your order is ready for pickup.",
    "foreign_id": "order-1042",
    "callback_url": "https://hooks.example.com/dropcowboy/outcome"
  }'

The route answers 202. The result arrives on contact.rvm.status and your callback_url; see Where results arrive. Outside the contact's calling hours the voicemail is held and retried for up to 3 days; see Calling hours.

A reason_code of 0 means the voicemail was left in the contact's mailbox. After that, the contact's carrier decides when it shows up: carriers can take up to 24 hours to deliver it, and some filter it as spam. Neither is in our control.

Proof of delivery

A voicemail result includes proof_of_delivery_url: a recording that shows your message reached the contact's voicemail system, available for 7 days. Results 0, 4001 and 4002 have it. On 4001 and 4002 the recording is the carrier saying why the mailbox couldn't take the message.

Voice broadcasts and AI calls a voicemail system answered get proof of delivery too, on the same results. Proof of delivery explains how to play a link, get a new one, and keep the recording.

Common problems

  • The send failed with 3014. Your account can't use audio_url. Send a media_id or tts_body instead.
  • The send failed with 3002 or 3015. 3002 means tts_body was sent without voice_id. 3015 means voice_id was sent without tts_body. Send both, or neither.
  • The voicemail failed with 4001 or 4002. Their mailbox can't take a message, so retrying won't help. Reach them on a channel they've agreed to; see Act on the result.
  • The proof of delivery link answers not_ready. Wait for contact.rvm.receipt, or retry after Retry-After. See Proof of delivery.
  • The result is 0 but the contact hasn't seen the voicemail. Carriers can take up to 24 hours to deliver it, or may filter it as spam. That's outside our control.
  • The send failed with 4010. It named no phone_line_id and your account has no default phone line. Pass phone_line_id, or set a default line.

For more symptoms and fixes, see Troubleshooting. Every code is in Outcomes.


Ringless voicemail technology delivers messages directly to voicemail inboxes. Delivery success depends on carrier compatibility, device type, and recipient settings. While designed for voicemail delivery, technical factors may affect performance. Drop Cowboy does not guarantee delivery rates or specific outcomes.

While Drop Cowboy provides tools to support compliance efforts, customers remain solely responsible for obtaining proper consent, maintaining opt-out lists, and complying with all federal and state telemarketing regulations. Consult with your legal counsel to ensure your specific use case and consent mechanisms comply with applicable laws.

Code samples

The requests from this page, ready to copy. Set DC_KEY and DC_SECRET to your API key pair first.

Send a ringless voicemail
curl -X POST https://api-v2.dropcowboy.com/rvm \
  -H "x-key: $DC_KEY" -H "x-secret: $DC_SECRET" \
  -H "Idempotency-Key: 6f1c2e9a-8b3d-4f7a-a2c5-9d4e1b7f3a60" \
  -H "Content-Type: application/json" \
  -d '{
    "contact_id": "5a4b3c2d-1e0f-4a9b-8c7d-6e5f4a3b2c1d",
    "phone_selector": "mobile_phone",
    "phone_line_id": "e2b6f9a3-5c1d-4e8b-a4f7-9c3e1b5d7a28",
    "voice_id": "7d2a9e4b-1c6f-4b3a-8e5d-2f9c7a1b4e63",
    "tts_body": "Hi {{contact.first_name|there}}, your order is ready for pickup.",
    "foreign_id": "order-1042",
    "callback_url": "https://hooks.example.com/dropcowboy/outcome"
  }'