SDS Webhooks Reference

Subscribing to Webhooks

Using webhooks provides a way for your application or services to be notified when certain events occur in SDS. As a user in the Agency role, log into the Agency Portal and select My Account from the toolbar in the upper right under your username.



Click the Webhooks tab.


From here, you can subscribe to one or more of the listed events. Simply enter the URL of your listener and select all of the events you wish to receive. Scope Agencies (that’s you) are comprised of one or more marketing channels. Channels may have different pricing, marketing materials, etc. Borrowers belong to a single marketing channel. If you wish to create a webhook subscription for all borrowers, regardless of channel then create your subscription on the first tab, “Set for Agency”. For our larger agencies, it may be desirable to subscribe to some channels and not others. Optionally, it may be necessary to have different listening endpoints for different channels. In these situations, you can choose the “Set for Channels” tab. This allows you to subscribe at the channel level.


Webhook Events

Borrower Created When the borrower’s user is first created in our system, either when the borrower is invited through the Agency Portal or when they complete the registration form.
Borrower Updated When the borrower changes status.
  • New - Before borrowers login.
  • Pending – While in the intake phase.
  • Active – After intake or acceptance for expert mode.
  • Inactive – When a borrower is marked as inactive in the portal.
Counseling Scheduled When the order is created for counseling.
Doc Prep Enabled When the order is created for doc prep.
Borrower Intake Advanced When the borrower advances a step in the intake wizard. This may be useful to know when a borrower bails out of the intake wizard, allowing you to reach out. Note, however, that this could result in up to 6 or more messages in short succession if the borrower proceeds directly through the intake process.
Action Plan Generated When the borrower has selected a new action plan / group of repayment plans.

Individual Webhooks

Below are the contents of each of the messages. These will be in JSON notation.

Borrower Created

Class Definition

public class BorrowerCreatedMessage
{
    public Guid BorrowerId { get; init; }
    public Guid AgencyId { get; init; }
    public Guid ChannelId { get; init; }
    public PersonName Name { get; init; }
    public BorrowerStatuses Status { get; init; }
    public DateTime CreatedDateTime { get; init; }
}

JSON Sample

{
    "Name":"BorrowerCreatedMessage",
    "Timestamp":"2023-08-09T16:11:23.2330351+00:00",
    "Payload":
    {
        "borrowerId":"c2ec899e-79d3-4a63-a31c-5d849b6bb66c",
        "agencyId":"11892045-c7ad-4be6-af76-72596f892888",
        "channelId":"2362ae2d-f440-47a9-abdf-e326359defe4",
        "name":
        {
            "firstName":"Noel",
            "lastName":"Conn"
        },
        "status":0,
        "createdDateTime":"2023-08-09T16:11:22.6854303Z"
    }
}

Borrower Updated

Class Definition

public class BorrowerUpdatedMessage
{
    public Guid BorrowerId { get; set; }
    public BorrowerStatuses Status { get; set; }
    public DateTime StatusDateTime { get; set; }
}

JSON Sample

{
    "Name":"BorrowerUpdatedMessage",
    "Timestamp":"2023-08-09T16:11:23.2330351+00:00",
    "Payload":
    {
        "borrowerId":"c2ec899e-79d3-4a63-a31c-5d849b6bb66c",
        "status":0,
        "statusDateTime":"2023-08-09T16:11:22.6854303Z"
    }
}

Counseling Scheduled

Class Definition

public class BorrowerCounselingScheduled
{
    public Guid BorrowerId { get; init; }
}

JSON Sample

{
    "Name":"BorrowerCounselingScheduled",
    "Timestamp":"2023-08-09T16:11:23.2330351+00:00",
    "Payload":
    {
        "borrowerId":"c2ec899e-79d3-4a63-a31c-5d849b6bb66c"
    }
}

Doc Prep Enabled

Class Definition

public class BorrowerDocPrepEnabled
{
    public Guid BorrowerId { get; init; }
}

JSON Sample

{
    "Name":"BorrowerDocPrepEnabled",
    "Timestamp":"2023-08-09T18:19:01.4368461+00:00",
    "Payload":
    {
        "borrowerId":"c2ec899e-79d3-4a63-a31c-5d849b6bb66c"
    }
}

Intake Advanced

Class Definition

public class BorrowerIntakeStepUpdatedMessage
{
    public Guid BorrowerId { get; set; }
    public IntakeSteps Status { get; set; }
    public DateTime StatusDateTime { get; set; }
}

JSON Sample

{
    "Name":"BorrowerIntakeStepUpdatedMessage",
    "Timestamp":"2023-08-09T15:35:55.6293826+00:00",
    "Payload":
    {
        "borrowerId":"e6783031-f9f4-4ffe-bb42-df352d3885b1",
        "status":50,
        "statusDateTime":"2023-08-09T15:35:51.7031992Z"
    }
}

Action Plan Generated

Class Definition

public class BorrowerActionPlanCreatedMessage
{
    public int PkId { get; set; }
    public Guid BorrowerId { get; set; }
    public decimal? CurrentMonthlyPayment { get; set; }
    public decimal? CurrentTotalPayment { get; set; }
    public int? CurrentTerm { get; set; }
    public decimal? CurrentLoanBalance { get; set; }
    public string PlanSelected { get; set; }
    public decimal? PlanMonthlyPayment { get; set; }
    public decimal? PlanTotalPayment { get; set; }
    public int? PlanTerm { get; set; }
    public decimal? PlanForgivenessAmount { get; set; }
    public DateTime DateCreated { get; set; }
}

JSON Sample

{
    "Name":"BorrowerActionPlanCreatedMessage"
    ,"Timestamp":"2023-08-09T18:28:39.3965356+00:00",
    "Payload":
    {
        "pkId":60,
        "borrowerId":"c2ec899e-79d3-4a63-a31c-5d849b6bb66c",
        "currentMonthlyPayment":"903.08",
        "currentTotalPayment":"267731.37",
        "currentTerm":360,
        "currentLoanBalance":"182642.00",
        "planSelected":"Revised Pay As You Earn (REPAYE) Repayment Plan, Consolidated Income-Contingent Repayment (ICR) Plan",
        "planMonthlyPayment":"313.65",
        "planTotalPayment":"221670.77",
        "planTerm":300,
        "planForgivenessAmount":"0.0",
        "dateCreated":"2023-08-09T18:28:39.0586434Z"
    }
}

Prepare Documents Complete

Class Definition

public class BorrowerPrepareComplete
{
    public Guid BorrowerId { get; set; }
    public DateTime StatusDateTime { get; set; }
}

JSON Sample

{
    "Name":"BorrowerPrepareComplete",
    "Timestamp":"2023-08-09T15:35:55.6293826+00:00",
    "Payload":
    {
        "borrowerId":"e6783031-f9f4-4ffe-bb42-df352d3885b1",
        "statusDateTime":"2023-08-09T15:35:51.7031992Z"
    }
}

Sign Documents Complete

Class Definition

public class BorrowerSignComplete
{
    public Guid BorrowerId { get; set; }
    public DateTime StatusDateTime { get; set; }
}

JSON Sample

{
    "Name":"BorrowerSignComplete",
    "Timestamp":"2023-08-09T15:35:55.6293826+00:00",
    "Payload":
    {
        "borrowerId":"e6783031-f9f4-4ffe-bb42-df352d3885b1",
        "statusDateTime":"2023-08-09T15:35:51.7031992Z"
    }
}

Send Documents Complete

Class Definition

public class BorrowerSendComplete
{
    public Guid BorrowerId { get; set; }
    public DateTime StatusDateTime { get; set; }
}

JSON Sample

{
    "Name":"BorrowerSendComplete",
    "Timestamp":"2023-08-09T15:35:55.6293826+00:00",
    "Payload":
    {
        "borrowerId":"e6783031-f9f4-4ffe-bb42-df352d3885b1",
        "statusDateTime":"2023-08-09T15:35:51.7031992Z"
    }
}

Phone Call Step Complete

Class Definition

public class BorrowerPhoneCallComplete
{
    public Guid BorrowerId { get; set; }
    public DateTime StatusDateTime { get; set; }
}

JSON Sample

{
    "Name":"BorrowerPhoneCallComplete",
    "Timestamp":"2023-08-09T15:35:55.6293826+00:00",
    "Payload":
    {
        "borrowerId":"e6783031-f9f4-4ffe-bb42-df352d3885b1",
        "statusDateTime":"2023-08-09T15:35:51.7031992Z"
    }
}

Common Elements

PersonName

public class PersonName
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

BorrowerStatuses

public enum BorrowerStatuses
{
    New,
    Registered,
    Active,
    Pending,
}

BorrowerStatuses

public enum IntakeSteps
{
    Login = 0,
    Profile = 10,
    Income = 20,
    Loans = 30,
    Questionnaire = 40,
    Paywall = 50,
    Payment = 60,
    Solutions = 70,
    Schedule = 80,
}