Transfer of rights
You can initiate the transfer of rights of an eNote using our API.
To initiate a transfer you need to specify the eNote ID provided by Snapdocs closings and the MERS organization ID of your partners to transfer the note to. Snapdocs eVault automatically detects the MERS transfer action based on the right holders you specified in the payload (see table below). If the combination of rights you specified is not available, we return an error (400).
In order to be able to submit a transfer you need to hold specific rights on a note, if our records indicate that you do not have the rights, we return an error (400).
When doing a transfer, you can also specify to simultaneously eDeliver the eNote to all your partners involved in the transfer. One eDelivery request will be submitted to MERS per unique MERS organization ID.
Both transfer and eDeliveries are asynchronous actions. Upon successfully submitting the transfer (and eDeliveries) we will return the "transmissions" (referring to MERS requests like transfers and eDeliveries) ids, you can use the GET endpoints to retrieve the statuses of those transmissions.
Transfer actions
- TransferControl:
transfer_to_controller_org_id- optional:
transfer_to_delegatee_for_transfers_org_id
- TransferLocation:
transfer_to_location_org_id
- TransferControlAndLocation:
transfer_to_controller_org_idtransfer_to_location_org_id- optional:
transfer_to_delegatee_for_transfers_org_id
- TransferDelegatee (transfer of servicing):
transfer_to_delegatee_org_id- optional:
transfer_to_subservicer_org_id
- TransferAll:
transfer_to_controller_org_idtransfer_to_location_org_idtransfer_to_delegatee_org_id- optional:
transfer_to_delegatee_for_transfers_org_id
- TransferControlAndDelegatee (transfer of Control and Servicing):
transfer_to_controller_org_idtransfer_to_delegatee_org_id- optional:
transfer_to_delegatee_for_transfers_org_id
- TransferControlWithSecuredParty:
transfer_to_controller_org_idtransfer_to_secured_party_org_id- optional:
transfer_to_delegatee_for_transfers_org_id - optional:
transfer_to_secured_party_delegatee_org_id
- TransferControlAndLocationWithSecuredParty:
transfer_to_controller_org_idtransfer_to_location_org_idtransfer_to_secured_party_org_id- optional:
transfer_to_delegatee_for_transfers_org_id - optional:
transfer_to_secured_party_delegatee_org_id
Note that transfer_to_delegatee_org_id references a transfer to the master servicer while transfer_to_delegatee_for_transfers_org_id references a transfer to the delegatee for transfers.
Transfer statuses
A GET on the transfer ID allows you to retrieve the status of a transfer
| status | direction | description |
|---|---|---|
| initiated | outbound | the transfer was initiated |
| mers_responded_failed | inbound / outbound | MERS returned a failure. Error messages can be seen in the errors array returned in the payload |
| snapdocs_error | inbound / outbound | A server error occurred in our system |
| processing_accept_or_reject | outbound | the transfer was submitted to MERS and is pending acceptance by the receiving parties |
| expired | inbound / outbound | we have received a notice that the transfer has expired |
| canceled | inbound / outbound | the transfer was canceled by one of the parties |
| pending_documents | inbound | the transfer can not be accepted before a copy of the note has been delivered to the eVault |
| can_accept_or_reject | inbound | the transfer is pending accept or reject from the recipient |
| no_rights_to_accept | inbound | a transfer notification was received but no action is required |
| self_accepted | inbound | as the recipient, you have accepted the transfer but it is still pending acceptance from all parties |
| self_rejected | inbound | as the recipient, you have rejected the transfer but it is still pending acceptance / rejection from all parties |
| self_rejected | outbound | temporary state where you initiated a cancel on the initiated transfer |
| all_accepted | inbound / outbound | all receiving parties have accepted the transfer. The transfer is complete |
| all_rejected | inbound / outbound | at least one receiving party has rejected the transfer. The transfer is complete but did not go through |
eDelivery statuses
A GET on the eDelivery ID allows you to retrieve the status of an eDelivery. Note that for inbound (received) eDeliveries there are two steps involved: first MERS send a pending notification, this notification is automatically confirmed by our system. After receiving the confirmation MERS sends the distribution.
| status | direction | description |
|---|---|---|
| initiated | outbound | the eDelivery was initiated |
| mers_responded_failed | inbound / outbound | MERS returned a failure |
| snapdocs_error | inbound / outbound | A server error occurred in our system |
| can_confirm_or_reject_receipt | inbound | the pending notification was received and the eDelivery is awaiting confirmation |
| confirming_or_rejecting_receipt | inbound | the confirmation was submitted |
| accepted_confirmation | inbound / outbound | the confirmation was accepted |
| rejected_confirmation | inbound / outbound | the confirmation was rejected |
| canceled_confirmation | inbound / outbound | the eDelivery was canceled |
| confirmed_pending_distribution | ||
| distribution_validation_processing | inbound | the distribution was received, the distributed documents are being validated |
| distribution_has_blocking_validation_errors | inbound | we identified blocking validation errors. Blocking errors include: the tamper seal on the note did not pass validation, the virus scanning of the included files failed |
| can_accept_or_reject_distribution | inbound | the distribution was received and blocking validations passed, the distribution can be accepted or rejected |
| accepting_or_rejecting_distribution | inbound | temporary state where the distribution acceptance was submitted and we are still waiting for MERS response |
| approved_distribution | inbound / outbound | the distribution was approved (accepted) |
| disapproved_distribution | inbound / outbound | the distribution was rejected |
| conditionally_approved_distribution | ||
| expired | inbound / outbound | the eDelivery has expired |
Webhooks
Webhook transfer events are sent to the URLs configured for your application. We initiate a POST request to the URL, the payload contains the transfer id and the transfer status. Example payload:
{ "event_type": "transfer_submitted", "status": "processing_accept_or_reject", "transfer_id": "8bbc6a97-6a90-48c6-859b-efda72a1cd36", "display_status": "pending", "event_timestamp": "2026-05-21T12:00:00Z" }
A webhook is sent for the following events
| event type | description | transfer direction |
|---|---|---|
| transfer_submitted | the transfer was submitted to MERS | outbound |
| transfer_failed | the transfer was submitted to MERS but MERS returned an error / failure | inbound / outbound |
| transfer_received | a transfer was received | inbound |
| transfer_accepted | the transfer was accepted by all the receiving parties | inbound / outbound |
| transfer_rejected | the transfer was rejected by one of the involved parties | inbound / outbound |
| transfer_expired | the transfer has expired before all the parties involved submitted their acceptance / rejection | inbound / outbound |
| transfer_canceled | the transfer was canceled by the submitting party | inbound / outbound |
| edelivery_submitted | the edelivery was submitted to MERS | outbound |
| edelivery_failed | the edelivery was submitted to MERS but MERS returned an error / failure | inbound / outbound |
| edelivery_accepted_confirmation | the edelivery confimation was accepted | inbound / outbound |
| edelivery_accepted_distribution | the edelivery distribution was accepted | inbound / outbound |
| edelivery_rejected_confirmation | the edelivery confirmation was rejected | inbound / outbound |
| edelivery_rejected_distribution | the edelivery disribution was rejected | inbound / outbound |
| edelivery_expired | the edelivery has expired | inbound / outbound |
| edelivery_canceled | the edelivery was canceled by the submitting party | inbound / outbound |
The display_status is a simplified status of the transfer or eDelivery (this is what is typically showed in the transfers and eDeliveries tables in the UI). Possible values for display_status are:
| value | description | direction |
|---|---|---|
| accepted | The transfer or eDelivery was accepted (success) | inbound / outbound |
| blocked | The eDelivery is blocked because of validation errors (failure) | inbound |
| expired | The transfer or eDelivery has expired (failure) | inbound / outbound |
| failed | An error occurred (failure) | inbound / outbound |
| pending | The transfer or eDelivery is pending accept or reject from the involved parties | inbound / outbound |
| rejected | The transfer or eDelivery was rejected from one of the involved parties (failure) | inbound / outbound |
| canceled | The transfer or eDelivery was canceled | inbound / outbound |
Note that this parameter is available both in the webhook payload and in the transfer and eDelivery object attributes.