To execute a SOAP request, you can ask Savon for an operation and call it with a message to send.

message = { username: 'luke', password: 'secret' }
response =, message: message)

In this example, the Symbol :authenticate is the name of the SOAP operation and the message Hash is what was known as the SOAP body Hash in version 1. The reason to change the naming is related to the SOAP request and the fact that the former "body" never really influenced the entire SOAP body.

If Savon has a WSDL, it verifies whether your service actually contains the operation you're trying to call and raises an ArgumentError in case it doesn't exist.

When you're calling a SOAP operation with a message Hash, Savon defaults to convert Hash key Symbols to lowerCamelcase XML tags. It does not convert any Hash key Strings. You can change this with the global :convert_request_keys_to option.

The operations #call method accepts a few local options.