NAV Navigation
Go C# HTTP Java Javascript Python Ruby

AdvicePay API v1.0.1

Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

Introduction

The AdvicePay API is organized around REST. Our API has predictable resource-oriented URLs, accepts and returns JSON-encoded responses, and uses standard HTTP response codes and verbs.

You can use the API through our test environment, which does not affect your live data or interact with banking networks.

Base URLs:

Authentication

Authorization: Bearer advicepay_access_token

curl "api_endpoint_here" -H "Authorization: Bearer advicepay_api_token_or_access_token_here"

OAuth Authorization Code Flow

The Authorization Code flow is useful for user-level integrations where AdvicePay users are within different accounts. OAuth clients for firms with developer access can be added within the developer console. OAuth clients for our integration partners are added upon request. You will need to provide your company name, website URL, logo, and redirect URI. A client ID and secret will be securely provisioned. The flow to authorize users for your app is

  1. Users are redirected to AdvicePay by your site and prompted to authorize your app
  2. Users are redirected back to your site by AdvicePay
  3. Your site requests an access token and refresh token using an authorization code
  4. Your site refreshes the access token and the refresh token using a refresh token
  5. Your site makes API calls using the access token

Step 1: Requesting Authorization from the User

HTTP Request

GET /oauth2/authorize

curl /oauth2/authorize?client_id=yourClientID&redirect_uri=https%3A%2F%2Fwww.example.com%2Foauth&scope=all&state=xj15na
Parameter Description
client_id Your provisioned client ID
redirect_uri The URL in your application where users will be sent after authorization (must match provisioned URI)
scope Currently, only “all” is supported
state An arbitrary string used to protect against cross-site request forgery attacks (optional)

Step 2: Users are Redirected Back to Your Site by AdvicePay

If the user accepts your request, AdvicePay redirects back to your site with a temporary code as a query parameter as well as the state you provided in the previous step. The temporary code will expire after 10 minutes. If the states don’t match, then a third party created the request, and you should abort the process.

For example, if your redirect URI is http://localhost/example and you provided the state xj15na in the previous step, your application would receive a GET request at the following URL upon authorization:

http://localhost/example?code=3fbbcd39-cd9c&state=xj15na

If the user rejects access, your application would receive a GET request at the following URL:

http://localhost/example?error=access_denied&state=xj15na

Step 3: Requesting an Access Token and Refresh Token Using Your Authorization Code

POST /oauth2/access_token

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=authorization_code&code=362ad374-735c-4f69-aa8e-bf384f8602de&redirect_uri=http://example.com/oauth&client_id=yourClientID&client_secret=yourClientSecret" /oauth2/access_token
{
  "access_token": "228c9f52-c003", 
  "access_token_expires_at": 1606942087, 
  "refresh_token": "dsfslBBDFSFS343", 
  "refresh_token_expires_at": 1609534087, 
  "scope": scope, 
  "token_type": "bearer"
}

Form Fields

Parameter Description
client_id Your provisioned client ID
client_secret Your provisioned client secret (required when authentication method is Client Secret POST)
client_assertion_type The assertion type for authentication (required when authentication method is Client Secret JWT or Private Key JWT)
client_assertion The JWT assertion for authentication (required when authentication method is Client Secret JWT or Private Key JWT)
code The authorization code you received at the redirect URI in the previous step
grant_type The OAuth 2.0 grant type (“authorization_code” should be used when using an authorization code to retrieve the access token)
redirect_uri The URL in your application where users will be sent after authorization. It is used here to verify your OAuth client credentials.
state The arbitrary string you provided in step 1 (optional)

You will get a JSON response containing an access token and a new refresh token for the user. These tokens should be stored securely and not be exposed outside of making API calls to AdvicePay. Access tokens expire after 5 minutes. Refresh tokens are single-use and expire after 30 days.

Step 4: Refreshing the Access Token and Refresh Token Using Your Refresh Token

HTTP Request

POST /oauth2/access_token

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=refresh_token&refresh_token=dsfslBBDFSFS343&client_id=yourClientID&client_secret=yourClientSecret" /oauth2/access_token
{
  "access_token": "228c9f52-c003", 
  "access_token_expires_at": 1606942087, 
  "refresh_token": "babadfdff55343434", 
  "refresh_token_expires_at": 1609534087, 
  "scope": scope, 
  "token_type": "bearer"
}

Form Fields

Parameter Description
client_id Your provisioned client ID
client_secret Your provisioned client secret (required when authentication method is Client Secret POST)
client_assertion_type The assertion type for authentication (required when authentication method is Client Secret JWT or Private Key JWT)
client_assertion The JWT assertion for authentication (required when authentication method is Client Secret JWT or Private Key JWT)
refresh_token The user’s refresh token
grant_type The OAuth 2.0 grant type (“refresh_token” should be used when using a refresh token to refresh the access token)

Step 5: Making API Calls with Your Access Token

For API calls, simply place the access token in the Authorization header.

Authorization: Bearer 228c9f52-c003

OAuth Client Credentials Flow

The Client Credentials flow is useful for enterprise account owner accounts acting on behalf of an integrating system. OAuth clients for firms with developer access can be added within the developer console. To enable the client credentials flow for your OAuth client, use the “Enable OAuth 2.0 Client Credentials Flow” toggle. The flow to authorize users for your app is:

Step 1: Requesting an Access Token Using Your Client ID and Client Secret

HTTP Request

POST /oauth2/access_token

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=client_credentials&client_id=yourClientID&client_secret=yourClientSecret" /oauth2/access_token
{
  "access_token": "228c9f52-c003", 
  "access_token_expires_at": 1606942087, 
  "scope": scope, 
  "token_type": "bearer"
}
Parameter Description
client_id Your provisioned client ID
client_secret Your provisioned client secret (required when authentication method is Client Secret POST)
client_assertion_type The assertion type for authentication (required when authentication method is Client Secret JWT or Private Key JWT)
client_assertion The JWT assertion for authentication (required when authentication method is Client Secret JWT or Private Key JWT)
grant_type The OAuth 2.0 grant type (“client_credentials” should be used when using the client credentials flow to retrieve the access token)

You will get a JSON response containing an access token for the account owner. This token should be stored securely and not be exposed outside of making API calls to AdvicePay. Access tokens expire after 5 minutes.

Step 2: Making API Calls with Your Access Token

For API calls, simply place the access token in the Authorization header.

Authorization: Bearer 228c9f52-c003

OAuth Authentication Methods

AdvicePay supports multiple authentication methods for obtaining an OAuth 2.0 token, depending on your needs. The authentication method can be set for your OAuth client in your developer dashboard.

Client Secret POST

This is the least secure authentication method because it involves sending the client secret in the body of each request to obtain a token. When you make the request to the access_token endpoint, simply include your provisioned client secret as the client_secret parameter in the request body.

Client Secret JWT

This is more secure because your client secret stays on your server. You’ll generate a JWT and sign it with your client secret using HS256. When you make the request to the access_token endpoint, include the signed JWT as the client_assertion parameter in the request body. You’ll also need to set the client_assertion_type parameter in the request body to urn:ietf:params:oauth:client-assertion-type:jwt-bearer.

Private Key JWT

This is the most secure way of obtaining a token. You’ll use an asymmetric key pair for authentication. You’ll generate a JWT and sign it with your private key using RS256. To use the Private Key JWT authentication method, you will need to upload your public key in your developer dashboard. We’ll verify each request with the public key. When you make the request to the access_token endpoint, include the signed JWT as the client_assertion parameter in the request body. You’ll also need to set the client_assertion_type parameter in the request body to urn:ietf:params:oauth:client-assertion-type:jwt-bearer.

JWT Format

Claim Description
aud Required. The URL of the resource you’re authenticating to. This will generally be https://app.advicepay.com/oauth2/access_token.
exp Required. The unix timestamp for the expiration time of the token. We recommend keeping this short. If the request is received after the time indicated by exp, it will be rejected.
jti Optional. The token identifier. If jti is used, AdvicePay will prevent the same jti from being used more than once. This mitigates replay attacks and is highly recommended.
iat Required. The unix timestamp for when the token was issued. If the request is received before the time indicated by iat, it will be rejected.
iss Required. The issuer of the token. This should always be your client ID.
sub Required. The subject of the token. This should also always be your client ID.

- Flow: authorizationCode

Scope Scope Description

- Flow: clientCredentials

- Token URL = /oauth2/access_token

Scope Scope Description

The /me endpoint

The me endpoint

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"string"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/me", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/me";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/me HTTP/1.1
Host: app.advicepay.com
Accept: application/json
Authorization: string
URL obj = new URL("https://app.advicepay.com/api/public/v1/me");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'string'
};

fetch('https://app.advicepay.com/api/public/v1/me',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'string'
}

r = requests.get('https://app.advicepay.com/api/public/v1/me', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'string'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/me',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/me

Retrieve current user

This endpoint returns information about the user your API call is authorizing as.

Parameters

Name In Type Required Description
Authorization header string true Bearer token used to authenticate the request.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1672531200,
  "updatedAt": 1675123200,
  "deletedAt": 0,
  "email": "user@example.com",
  "parentID": 32,
  "parentRoleTitle": "",
  "externalID": "ext-001",
  "firstName": "John",
  "lastName": "Doe",
  "verified": true,
  "roleTitle": "Advisor",
  "accountOwner": false
}

Responses

Status Meaning Description Schema
200 OK The current user. None

Response Schema

Admins

List Admins

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/admins", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/admins";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/admins HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/admins");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/admins',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/admins', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/admins',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/admins

Retrieve a paginated list of admins.

This endpoint allows you to list all admins in the system sorted by creation date in descending order. You can paginate the results and filter the list based on attributes such as roleTitle, email, or parentID. User must be Managing Advisor, Full-access Advisor, or Admin to access this endpoint.

Parameters

Name In Type Required Description
page query number false Determines which page of the paginated results to return.
perPage query number false Number of records per page (maximum 100).
roleTitle query string false Filters results by role (e.g., developer, admin, analyst, reviewer).
email query string false Filters results by an admin’s email address.
parentID query string false Filters results by the parentID (the unique ID of the associated advisor).

Example responses

200 Response

{
  "items": [
    {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "email": "example@advicepay.com",
      "firstName": "first",
      "lastName": "last",
      "parentID": 1,
      "roleTitle": "Admin",
      "parent": {
        "id": 1,
        "createdAt": 1551201267,
        "updatedAt": 1551201267,
        "deletedAt": 0,
        "email": "example@advicepay.com",
        "externalID": "abc123",
        "firstName": "first",
        "lastName": "last",
        "verified": true,
        "roleTitle": "Advisor",
        "completedOnboarding": true,
        "officeID": 1,
        "metadata": {
          "Phone": "888-888-8888"
        }
      }
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Responses

Status Meaning Description Schema
200 OK The paginated list of admins. AdminList

Create an Admin

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://app.advicepay.com/api/public/v1/admins", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    
    /// Make a dummy request
    public async Task MakePostRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/admins";
      
      
      await PostAsync(null, url);
      
    }

    /// Performs a POST Request
    public async Task PostAsync(undefined content, string url)
    {
        //Serialize Object
        StringContent jsonContent = SerializeObject(content);

        //Execute POST request
        HttpResponseMessage response = await Client.PostAsync(url, jsonContent);
    }
    
    
    
    /// Serialize an object to Json
    private StringContent SerializeObject(undefined content)
    {
        //Serialize Object
        string jsonObject = JsonConvert.SerializeObject(content);

        //Create Json UTF8 String Content
        return new StringContent(jsonObject, Encoding.UTF8, "application/json");
    }
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
POST https://app.advicepay.com/api/public/v1/admins HTTP/1.1
Host: app.advicepay.com
Content-Type: application/json
Accept: application/json

URL obj = new URL("https://app.advicepay.com/api/public/v1/admins");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
const inputBody = '{
  "email": "example@advicepay.com",
  "firstName": "first",
  "lastName": "last",
  "permission": "Admin",
  "parentID": 1,
  "disableDirectLogin": false,
  "ssoID": "unique_sso_id"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/admins',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.post('https://app.advicepay.com/api/public/v1/admins', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.post 'https://app.advicepay.com/api/public/v1/admins',
  params: {
  }, headers: headers

p JSON.parse(result)

POST /api/public/v1/admins

Create a new admin associated with a specified advisor.

This endpoint allows you to create a new admin user. The admin will be associated with a specified advisor (parentID) and assigned specific permissions. Required Permissions: User must be a Managing Advisor, Full-access Advisor, or Admin.

Body parameter

{
  "email": "example@advicepay.com",
  "firstName": "first",
  "lastName": "last",
  "permission": "Admin",
  "parentID": 1,
  "disableDirectLogin": false,
  "ssoID": "unique_sso_id"
}

Parameters

Name In Type Required Description
body body object true Details of the admin to create.
» email body string false Email is validated for correct format and to ensure it is unique for the given parentID.
» firstName body string false Trailing or leading whitespaces will be trimmed.
» lastName body string false Trailing or leading whitespaces will be trimmed.
» permission body string false Must be Admin, Reviewer, or Analyst. Admin provides the same access as the parent user. Reviewer can make approvals and view-only access to payments. Analyst provides read-only access to the parent user’s account.
» parentID body number false The unique ID of the advisor associated with the admin.
» disableDirectLogin body boolean false If true, the admin can only log in using SSO.
» ssoID body string false Required if disableDirectLogin is true. This is your unique identifier to link AdvicePay with your platform via SSO.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "email": "example@advicepay.com",
  "firstName": "first",
  "lastName": "last",
  "parentID": 1,
  "roleTitle": "Admin",
  "parent": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "verified": true,
    "roleTitle": "Advisor",
    "completedOnboarding": true,
    "officeID": 1,
    "metadata": {
      "Phone": "888-888-8888"
    }
  }
}

Responses

Status Meaning Description Schema
200 OK The newly created admin object. Admin

Get an Admin

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"string"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/admins/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/admins/{id}";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/admins/{id} HTTP/1.1
Host: app.advicepay.com
Accept: application/json
Authorization: string
URL obj = new URL("https://app.advicepay.com/api/public/v1/admins/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'string'
};

fetch('https://app.advicepay.com/api/public/v1/admins/{id}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'string'
}

r = requests.get('https://app.advicepay.com/api/public/v1/admins/{id}', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'string'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/admins/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/admins/{id}

Retrieve details of a specific admin by their ID.

This endpoint retrieves the full details of a single admin, including their profile information, role, and associated advisor. Required Permissions: User must be an Advisor.

Parameters

Name In Type Required Description
id path string true The unique identifier of the admin to fetch.
Authorization header string true Bearer token used to authenticate the request.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "email": "example@advicepay.com",
  "firstName": "first",
  "lastName": "last",
  "parentID": 1,
  "roleTitle": "Admin",
  "parent": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "verified": true,
    "roleTitle": "Advisor",
    "completedOnboarding": true,
    "officeID": 1,
    "metadata": {
      "Phone": "888-888-8888"
    }
  }
}

Responses

Status Meaning Description Schema
200 OK The requested admin. Admin

Update an Admin

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PUT", "https://app.advicepay.com/api/public/v1/admins/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    
    
    /// Make a dummy request
    public async Task MakePutRequest()
    {
      int id = 1;
      string url = "https://app.advicepay.com/api/public/v1/admins/{id}";

      
      
      var result = await PutAsync(id, null, url);
          
    }

    /// Performs a PUT Request
    public async Task PutAsync(int id, undefined content, string url)
    {
        //Serialize Object
        StringContent jsonContent = SerializeObject(content);

        //Execute PUT request
        HttpResponseMessage response = await Client.PutAsync(url + $"/{id}", jsonContent);

        //Return response
        return await DeserializeObject(response);
    }
    
    
    /// Serialize an object to Json
    private StringContent SerializeObject(undefined content)
    {
        //Serialize Object
        string jsonObject = JsonConvert.SerializeObject(content);

        //Create Json UTF8 String Content
        return new StringContent(jsonObject, Encoding.UTF8, "application/json");
    }
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
PUT https://app.advicepay.com/api/public/v1/admins/{id} HTTP/1.1
Host: app.advicepay.com
Content-Type: application/json
Accept: application/json

URL obj = new URL("https://app.advicepay.com/api/public/v1/admins/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PUT");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
const inputBody = '{
  "email": "example@advicepay.com",
  "firstName": "first",
  "lastName": "last",
  "permission": "Admin",
  "disableDirectLogin": true,
  "ssoID": "12345"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/admins/{id}',
{
  method: 'PUT',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.put('https://app.advicepay.com/api/public/v1/admins/{id}', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.put 'https://app.advicepay.com/api/public/v1/admins/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

PUT /api/public/v1/admins/{id}

Update the details of an existing admin by their ID.

This endpoint allows you to update the details of an existing admin, including their email, name, permissions, and SSO settings. Required Permissions: User must be a Managing Advisor, Full-access Advisor, or Admin.

Body parameter

{
  "email": "example@advicepay.com",
  "firstName": "first",
  "lastName": "last",
  "permission": "Admin",
  "disableDirectLogin": true,
  "ssoID": "12345"
}

Parameters

Name In Type Required Description
id path string true The unique identifier of the admin to update.
body body object true At least one field must be provided to update the admin.
» email body string false Email is validated for correct format and uniqueness. If not sent, the existing email is maintained.
» firstName body string false Trailing or leading whitespaces will be trimmed. If not sent, the existing first name is maintained.
» lastName body string false Trailing or leading whitespaces will be trimmed. If not sent, the existing last name is maintained.
» permission body string false Must be Admin, Reviewer, or Analyst. Admin provides the same access as the parent user. Reviewer can make approvals and view-only access to payments. Analyst provides read-only access. If not sent, the existing permission is maintained.
» disableDirectLogin body boolean false If true, the admin will only log in using SSO. If not sent, the existing setting is maintained.
» ssoID body string false Required if disableDirectLogin is set to true. This is your unique identifier to link AdvicePay with your platform via SSO. If not sent, the existing SSO ID is maintained.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "email": "example@advicepay.com",
  "firstName": "first",
  "lastName": "last",
  "parentID": 1,
  "roleTitle": "Admin",
  "parent": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "verified": true,
    "roleTitle": "Advisor",
    "completedOnboarding": true,
    "officeID": 1,
    "metadata": {
      "Phone": "888-888-8888"
    }
  }
}

Responses

Status Meaning Description Schema
200 OK Successfully updated the admin. Admin

Delete an Admin

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("DELETE", "https://app.advicepay.com/api/public/v1/admins/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    
    
    
    /// Make a dummy request
    public async Task MakeDeleteRequest()
    {
      int id = 1;
      string url = "https://app.advicepay.com/api/public/v1/admins/{id}";

      await DeleteAsync(id, url);
    }

    /// Performs a DELETE Request
    public async Task DeleteAsync(int id, string url)
    {
        //Execute DELETE request
        HttpResponseMessage response = await Client.DeleteAsync(url + $"/{id}");

        //Return response
        await DeserializeObject(response);
    }
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
DELETE https://app.advicepay.com/api/public/v1/admins/{id} HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/admins/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("DELETE");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/admins/{id}',
{
  method: 'DELETE',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.delete('https://app.advicepay.com/api/public/v1/admins/{id}', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.delete 'https://app.advicepay.com/api/public/v1/admins/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

DELETE /api/public/v1/admins/{id}

Delete an admin by their unique ID.

This endpoint allows you to delete an admin by their unique identifier. Required Permissions: User must be a Managing Advisor, Full-access Advisor, or Admin.

Parameters

Name In Type Required Description
id path string true The unique identifier of the admin to delete.

Example responses

200 Response

{
  "id": 1
}

Responses

Status Meaning Description Schema
200 OK Successfully deleted the admin. Inline

Response Schema

Status Code 200

Name Type Required Restrictions Description
» id number false none The ID of the deleted admin.

Advisors

List Advisors

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/advisors", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/advisors";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/advisors HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/advisors");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/advisors',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/advisors', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/advisors',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/advisors

Retrieve a paginated list of advisors sorted by creation date in descending order.

This endpoint allows you to list all advisors in the system. You can paginate the results and filter the list based on attributes such as verified, email, externalID, or officeID. Required Permissions: User must be a Managing Advisor, Full-access Advisor, or Admin.

Parameters

Name In Type Required Description
page query number false Determines which page of the paginated results to return.
perPage query number false Determines the number of records per page (maximum 100).
verified query boolean false Filters results by whether advisors have verified their email and set a password.
email query string false Filters results by the advisor’s email address.
externalID query string false Filters results by the advisor’s external identifier.
officeID query number false Filters results by the office ID associated with the advisor.

Example responses

200 Response

{
  "items": [
    {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "email": "example@advicepay.com",
      "externalID": "abc123",
      "firstName": "first",
      "lastName": "last",
      "verified": true,
      "roleTitle": "Advisor",
      "completedOnboarding": true,
      "officeID": 1,
      "metadata": {
        "Phone": "888-888-8888"
      }
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Responses

Status Meaning Description Schema
200 OK A paginated list of advisors. AdvisorList

Create an Advisor

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://app.advicepay.com/api/public/v1/advisors", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    
    /// Make a dummy request
    public async Task MakePostRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/advisors";
      
      
      await PostAsync(null, url);
      
    }

    /// Performs a POST Request
    public async Task PostAsync(undefined content, string url)
    {
        //Serialize Object
        StringContent jsonContent = SerializeObject(content);

        //Execute POST request
        HttpResponseMessage response = await Client.PostAsync(url, jsonContent);
    }
    
    
    
    /// Serialize an object to Json
    private StringContent SerializeObject(undefined content)
    {
        //Serialize Object
        string jsonObject = JsonConvert.SerializeObject(content);

        //Create Json UTF8 String Content
        return new StringContent(jsonObject, Encoding.UTF8, "application/json");
    }
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
POST https://app.advicepay.com/api/public/v1/advisors HTTP/1.1
Host: app.advicepay.com
Content-Type: application/json
Accept: application/json

URL obj = new URL("https://app.advicepay.com/api/public/v1/advisors");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
const inputBody = '{
  "email": "example@advicepay.com",
  "externalID": "abc123",
  "firstName": "first",
  "lastName": "last",
  "permission": "Advisor",
  "disableDirectLogin": false,
  "ssoID": "unique_sso_id",
  "officeID": 1,
  "metadata": {
    "Input Field": "Test Input",
    "Dropdown Field": "Option 2",
    "Multi Tag Field": [
      "a",
      "b",
      "c"
    ]
  }
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/advisors',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.post('https://app.advicepay.com/api/public/v1/advisors', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.post 'https://app.advicepay.com/api/public/v1/advisors',
  params: {
  }, headers: headers

p JSON.parse(result)

POST /api/public/v1/advisors

Create a new advisor.

This endpoint allows you to create a new advisor. The advisor can be assigned to a specific office, and additional metadata can be added. Required Permissions: User must be a Managing Advisor, Full-access Advisor, or Admin.

Body parameter

{
  "email": "example@advicepay.com",
  "externalID": "abc123",
  "firstName": "first",
  "lastName": "last",
  "permission": "Advisor",
  "disableDirectLogin": false,
  "ssoID": "unique_sso_id",
  "officeID": 1,
  "metadata": {
    "Input Field": "Test Input",
    "Dropdown Field": "Option 2",
    "Multi Tag Field": [
      "a",
      "b",
      "c"
    ]
  }
}

Parameters

Name In Type Required Description
body body object true The details of the advisor to create.
» email body string true Email is validated for correct format and uniqueness in the database.
» externalID body string false No validation or formatting enforced. Note that this is not the same as ssoID. It is also up to the caller to ensure uniqueness of the value.
» firstName body string true Trailing or leading whitespaces will be trimmed.
» lastName body string true Trailing or leading whitespaces will be trimmed.
» permission body string true Must be one of the following: Advisor, Read-only Advisor, No-login Advisor, Managing Advisor, or Full-access Advisor. Advisor gives full access to AdvicePay. Read-only Advisor gives login access but no power to invoice clients. No-login Advisor gives no login, and is completely managed by home office. Managing Advisor can see office-wide data. Full-access Advisor can see firm-wide data and update firm settings.(note: Full-access Advisor permissions are only available to the Account Owner for enterprise firms. The request will be rejected if this is set on an enterprise advisor.).
» disableDirectLogin body boolean false If true, the advisor will only be able to log in using SSO.
» ssoID body string false If disableDirectLogin is set to true, this field is required to enable SSO login. The ID will be your unique idenitifier to create the SSO link between AdvicePay and your platform.
» officeID body number false If included, the advisor will be assigned to the specified office.
» metadata body object false This is used to populate the metadata for the advisor.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "email": "example@advicepay.com",
  "externalID": "abc123",
  "firstName": "first",
  "lastName": "last",
  "verified": true,
  "roleTitle": "Advisor",
  "completedOnboarding": true,
  "officeID": 1,
  "metadata": {
    "Phone": "888-888-8888"
  }
}

Responses

Status Meaning Description Schema
200 OK Successfully created the advisor. Advisor

Get an Advisor

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/advisors/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/advisors/{id}";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/advisors/{id} HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/advisors/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/advisors/{id}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/advisors/{id}', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/advisors/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/advisors/{id}

Retrieve details of a specific advisor by their ID.

This endpoint retrieves the full details of a single advisor by their unique identifier. Required Permissions: User must be a Managing Advisor, Full-access Advisor, or Admin.

Parameters

Name In Type Required Description
id path string true The unique identifier of the advisor to fetch.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "email": "example@advicepay.com",
  "externalID": "abc123",
  "firstName": "first",
  "lastName": "last",
  "verified": true,
  "roleTitle": "Advisor",
  "completedOnboarding": true,
  "officeID": 1,
  "metadata": {
    "Phone": "888-888-8888"
  }
}

Responses

Status Meaning Description Schema
200 OK The requested advisor. Advisor

Update an Advisor

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PUT", "https://app.advicepay.com/api/public/v1/advisors/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    
    
    /// Make a dummy request
    public async Task MakePutRequest()
    {
      int id = 1;
      string url = "https://app.advicepay.com/api/public/v1/advisors/{id}";

      
      
      var result = await PutAsync(id, null, url);
          
    }

    /// Performs a PUT Request
    public async Task PutAsync(int id, undefined content, string url)
    {
        //Serialize Object
        StringContent jsonContent = SerializeObject(content);

        //Execute PUT request
        HttpResponseMessage response = await Client.PutAsync(url + $"/{id}", jsonContent);

        //Return response
        return await DeserializeObject(response);
    }
    
    
    /// Serialize an object to Json
    private StringContent SerializeObject(undefined content)
    {
        //Serialize Object
        string jsonObject = JsonConvert.SerializeObject(content);

        //Create Json UTF8 String Content
        return new StringContent(jsonObject, Encoding.UTF8, "application/json");
    }
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
PUT https://app.advicepay.com/api/public/v1/advisors/{id} HTTP/1.1
Host: app.advicepay.com
Content-Type: application/json
Accept: application/json

URL obj = new URL("https://app.advicepay.com/api/public/v1/advisors/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PUT");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
const inputBody = '{
  "email": "example@advicepay.com",
  "externalID": "abc123",
  "firstName": "first",
  "lastName": "last",
  "permission": "Advisor",
  "disableDirectLogin": false,
  "ssoID": "unique_sso_id",
  "officeID": 1,
  "metadata": {
    "Input Field": "Test Input",
    "Dropdown Field": "Option 2",
    "Multi Tag Field": [
      "a",
      "b",
      "c"
    ]
  }
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/advisors/{id}',
{
  method: 'PUT',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.put('https://app.advicepay.com/api/public/v1/advisors/{id}', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.put 'https://app.advicepay.com/api/public/v1/advisors/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

PUT /api/public/v1/advisors/{id}

Update the details of an existing advisor by their ID.

This endpoint allows you to update the details of an advisor, including email, name, permissions, and metadata. If a field is not provided in the request, the existing value for that field will be maintained, except for metadata, which will delete the existing metadata if provided. Required Permissions: User must be a Managing Advisor, Full-access Advisor, or Admin.

Body parameter

{
  "email": "example@advicepay.com",
  "externalID": "abc123",
  "firstName": "first",
  "lastName": "last",
  "permission": "Advisor",
  "disableDirectLogin": false,
  "ssoID": "unique_sso_id",
  "officeID": 1,
  "metadata": {
    "Input Field": "Test Input",
    "Dropdown Field": "Option 2",
    "Multi Tag Field": [
      "a",
      "b",
      "c"
    ]
  }
}

Parameters

Name In Type Required Description
id path string true The unique identifier of the advisor to update.
body body object true The fields to update for the advisor.
» email body string false Email is validated for correct format and uniqueness. If not sent, the existing email is maintained.
» externalID body string false No validation or formatting enforced. It is up to the caller to ensure uniqueness. If not sent, the existing external ID is maintained.
» firstName body string false Trailing or leading whitespaces will be trimmed. If not sent, the existing first name is maintained.
» lastName body string false Trailing or leading whitespaces will be trimmed. If not sent, the existing last name is maintained.
» permission body string false Must be one of the following: Advisor, Read-only Advisor, No-login Advisor, Managing Advisor, or Full-access Advisor. “Advisor” gives full access to AdvicePay. “Read-only Advisor” gives login access but no power to invoice clients. “No-login Advisor” gives no login, and is completely managed by home office. “Managing Advisor” can see office-wide data. “Full-access Advisor” can see firm-wide data and update firm settings. If not sent, the existing permission is maintained.
» disableDirectLogin body boolean false If true, the advisor will only log in using SSO. If not sent, the existing setting is maintained.
» ssoID body string false Required if disableDirectLogin is true. The ID will be your unique idenitifier to create the SSO link between AdvicePay and your platform. If this is not sent on the request, the existing SSO ID will be maintained.
» officeID body number false If included, the advisor will be assigned to the specified office. If not sent, the existing office ID is maintained.
» metadata body object false This is used to populate the metadata for the advisor. If this is not sent on the request, the existing metadata will be maintained. If this is on the request, all existing metadata will be deleted.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "email": "example@advicepay.com",
  "externalID": "abc123",
  "firstName": "first",
  "lastName": "last",
  "verified": true,
  "roleTitle": "Advisor",
  "completedOnboarding": true,
  "officeID": 1,
  "metadata": {
    "Phone": "888-888-8888"
  }
}

Responses

Status Meaning Description Schema
200 OK Successfully updated the advisor. Advisor

Delete an Advisor

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("DELETE", "https://app.advicepay.com/api/public/v1/advisors/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    
    
    
    /// Make a dummy request
    public async Task MakeDeleteRequest()
    {
      int id = 1;
      string url = "https://app.advicepay.com/api/public/v1/advisors/{id}";

      await DeleteAsync(id, url);
    }

    /// Performs a DELETE Request
    public async Task DeleteAsync(int id, string url)
    {
        //Execute DELETE request
        HttpResponseMessage response = await Client.DeleteAsync(url + $"/{id}");

        //Return response
        await DeserializeObject(response);
    }
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
DELETE https://app.advicepay.com/api/public/v1/advisors/{id} HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/advisors/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("DELETE");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/advisors/{id}',
{
  method: 'DELETE',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.delete('https://app.advicepay.com/api/public/v1/advisors/{id}', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.delete 'https://app.advicepay.com/api/public/v1/advisors/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

DELETE /api/public/v1/advisors/{id}

Delete an advisor by their ID.

This endpoint allows you to delete an advisor by their unique identifier. Required Permissions: User must be a Managing Advisor, Full-access Advisor, or Admin.

Parameters

Name In Type Required Description
id path string true The unique identifier of the advisor to delete.

Example responses

200 Response

{
  "id": 1
}

Responses

Status Meaning Description Schema
200 OK Successfully deleted the advisor. Inline

Response Schema

Status Code 200

Name Type Required Restrictions Description
» id number false none The ID of the deleted advisor.

Agreements

List Agreements

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/agreements", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/agreements";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/agreements HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/agreements");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/agreements',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/agreements', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/agreements',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/agreements

Retrieve a paginated list of agreements.

This endpoint allows you to retrieve a list of agreements sorted by createdAt in descending order. You can paginate the results and filter by advisor, client, engagement, invoice, status, or timestamps.

Parameters

Name In Type Required Description
page query number false Determines which page of the paginated results to return.
perPage query number false Determines the number of records per page (maximum 100).
advisorID query number false Filters agreements by advisor ID.
clientID query number false Filters agreements by client ID.
engagementID query number false Filters agreements by engagement ID.
invoiceID query number false Filters agreements by invoice ID.
status query string false Filters agreements by status. Must be one of: agreement_status_created, agreement_status_opened, agreement_status_complete, or agreement_status_voided.
completedAfter query number false Filters agreements by completedAt timestamp, returning agreements completed after this value. For most operations, use finalizedAfter instead.
completedBefore query number false Filters agreements by completedAt timestamp, returning agreements completed before this value. For most operations, use finalizedBefore instead.
finalizedAfter query number false Filters agreements by finalizedAt timestamp, returning agreements finalized after this value.
finalizedBefore query number false Filters agreements by finalizedAt timestamp, returning agreements finalized before this value.
updatedAfter query number false Filters agreements by updatedAt timestamp, returning agreements updated after this value.
updatedBefore query number false Filters agreements by updatedAt timestamp, returning agreements updated before this value.

Example responses

200 Response

{
  "items": [
    {
      "id": 1,
      "completedAt": 1551201267,
      "createdAt": 1551201267,
      "deletedAt": 0,
      "finalizedAt": 1551201268,
      "updatedAt": 1551201268,
      "clientID": 1,
      "advisorID": 2,
      "engagementID": 3,
      "invoiceID": 1,
      "status": "agreement_status_complete",
      "signingOrderEnabled": true,
      "fileNames": [
        "example1.pdf",
        "example2.pdf"
      ],
      "template": {
        "name": "ExampleTemplate",
        "description": "Example eSign Template"
      },
      "signers": [
        {
          "agreementID": 1,
          "email": "example@advicepay.com",
          "name": "first last",
          "status": "string",
          "signedAt": 1551201267,
          "completedAt": 1551201267,
          "signingOrder": 0,
          "title": "Client",
          "externalID": "abc123"
        }
      ]
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Responses

Status Meaning Description Schema
200 OK A paginated list of agreements. AgreementList

Get an Agreement

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/agreements/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/agreements/{id}";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/agreements/{id} HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/agreements/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/agreements/{id}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/agreements/{id}', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/agreements/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/agreements/{id}

Retrieve details of a specific agreement by its ID.

This endpoint retrieves the full details of a single agreement by its unique identifier.

Parameters

Name In Type Required Description
id path string true The unique identifier of the agreement to fetch.

Example responses

200 Response

{
  "id": 1,
  "completedAt": 1551201267,
  "createdAt": 1551201267,
  "deletedAt": 0,
  "finalizedAt": 1551201268,
  "updatedAt": 1551201268,
  "clientID": 1,
  "advisorID": 2,
  "engagementID": 3,
  "invoiceID": 1,
  "status": "agreement_status_complete",
  "signingOrderEnabled": true,
  "fileNames": [
    "example1.pdf",
    "example2.pdf"
  ],
  "template": {
    "name": "ExampleTemplate",
    "description": "Example eSign Template"
  },
  "signers": [
    {
      "agreementID": 1,
      "email": "example@advicepay.com",
      "name": "first last",
      "status": "string",
      "signedAt": 1551201267,
      "completedAt": 1551201267,
      "signingOrder": 0,
      "title": "Client",
      "externalID": "abc123"
    }
  ]
}

Responses

Status Meaning Description Schema
200 OK The requested agreement. Agreement

Download an Agreement

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/agreements/{id}/download", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/agreements/{id}/download";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/agreements/{id}/download HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/agreements/{id}/download");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/agreements/{id}/download',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/agreements/{id}/download', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/agreements/{id}/download',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/agreements/{id}/download

Download a specific agreement by its ID.

This endpoint allows you to download a PDF file for a specific agreement by its unique ID. - If the expect query parameter is “binary” (default) or omitted, the response will contain the binary representation of the file, with Content-Type: application/octet-stream and Content-Transfer-Encoding: binary.

Parameters

Name In Type Required Description
id path string true The unique identifier of the agreement to download.
expect query string false The expected response type. Must be one of: binary (default) or json.

Example responses

200 Response

{
  "data": "Binary or JSON with a data property containing base64-encoded data"
}

Responses

Status Meaning Description Schema
200 OK The agreement file. Inline

Response Schema

Status Code 200

Name Type Required Restrictions Description
» data string false none Base64-encoded representation of the file.

Clients

List Clients

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/clients", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/clients";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/clients HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/clients");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/clients',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/clients', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/clients',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/clients

Retrieve a paginated list of clients.

This endpoint allows you to retrieve a list of clients sorted by createdAt in descending order. You can paginate the results and filter by advisor, email, name, external ID, or verification status.

Parameters

Name In Type Required Description
page query number false Determines which page of the paginated results to return.
perPage query number false Determines the number of records per page (maximum 100).
advisorID query number false Filters clients by advisor ID.
verified query boolean false Filters clients by whether they have verified their email and set a password.
email query string false Filters clients by email address.
name query string false Filters clients by their first and/or last name. This is a case-insensitive fuzzy match.
externalID query string false Filters clients by external ID.

Example responses

200 Response

{
  "items": [
    {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "email": "example@advicepay.com",
      "externalID": "abc123",
      "firstName": "first",
      "lastName": "last",
      "invoiceDisplayName": "",
      "advisorID": 1,
      "verified": false,
      "wealthboxURL": "",
      "metadata": {
        "Phone": "888-888-8888"
      },
      "advisor": {
        "id": 1,
        "createdAt": 1551201267,
        "updatedAt": 1551201267,
        "deletedAt": 0,
        "email": "example@advicepay.com",
        "externalID": "abc123",
        "firstName": "first",
        "lastName": "last",
        "verified": true,
        "roleTitle": "Advisor",
        "completedOnboarding": true,
        "officeID": 1,
        "metadata": {
          "Phone": "888-888-8888"
        }
      }
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Responses

Status Meaning Description Schema
200 OK A paginated list of clients. ClientList

Create a Client

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://app.advicepay.com/api/public/v1/clients", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    
    /// Make a dummy request
    public async Task MakePostRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/clients";
      
      
      await PostAsync(null, url);
      
    }

    /// Performs a POST Request
    public async Task PostAsync(undefined content, string url)
    {
        //Serialize Object
        StringContent jsonContent = SerializeObject(content);

        //Execute POST request
        HttpResponseMessage response = await Client.PostAsync(url, jsonContent);
    }
    
    
    
    /// Serialize an object to Json
    private StringContent SerializeObject(undefined content)
    {
        //Serialize Object
        string jsonObject = JsonConvert.SerializeObject(content);

        //Create Json UTF8 String Content
        return new StringContent(jsonObject, Encoding.UTF8, "application/json");
    }
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
POST https://app.advicepay.com/api/public/v1/clients HTTP/1.1
Host: app.advicepay.com
Content-Type: application/json
Accept: application/json

URL obj = new URL("https://app.advicepay.com/api/public/v1/clients");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
const inputBody = '{
  "email": "example@advicepay.com",
  "externalID": "abc123",
  "firstName": "first",
  "lastName": "last",
  "invoiceDisplayName": "",
  "advisorID": 1,
  "disableDirectLogin": false,
  "ssoID": "unique_sso_id",
  "wealthboxURL": "https://app.crmworkspace.com/contacts/12345",
  "metadata": {
    "Input Field": "Test Input",
    "Dropdown Field": "Option 2",
    "Multi Tag Field": [
      "a",
      "b",
      "c"
    ]
  }
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/clients',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.post('https://app.advicepay.com/api/public/v1/clients', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.post 'https://app.advicepay.com/api/public/v1/clients',
  params: {
  }, headers: headers

p JSON.parse(result)

POST /api/public/v1/clients

Create a new client.

This endpoint allows you to create a new client. Essential accounts are limited to 10 clients. Required Permissions: User must be a Managing Advisor, Full-access Advisor, or Admin.

Body parameter

{
  "email": "example@advicepay.com",
  "externalID": "abc123",
  "firstName": "first",
  "lastName": "last",
  "invoiceDisplayName": "",
  "advisorID": 1,
  "disableDirectLogin": false,
  "ssoID": "unique_sso_id",
  "wealthboxURL": "https://app.crmworkspace.com/contacts/12345",
  "metadata": {
    "Input Field": "Test Input",
    "Dropdown Field": "Option 2",
    "Multi Tag Field": [
      "a",
      "b",
      "c"
    ]
  }
}

Parameters

Name In Type Required Description
body body object true The details of the client to create.
» email body string false Email is validated for correct format and must be unique for the given advisorID.
» externalID body string false No validation or formatting enforced. If the authorized user does not have permission to change Client IDs, any provided value will be ignored.
» firstName body string false Trailing or leading whitespaces will be trimmed.
» lastName body string false Trailing or leading whitespaces will be trimmed.
» invoiceDisplayName body string false The name to display on invoices. If left blank, the Client’s first and last name will be used by default. Trailing or leading whitespaces will be trimmed.
» advisorID body number false This will create the client-advisor relationship. If not provided, it defaults to the authorized user’s ID (or Parent ID for Admin roles).
» disableDirectLogin body boolean false If set to true, the client will only be able to login using SSO.
» ssoID body string false Required if disableDirectLogin is true. This ID is used to create the SSO link between AdvicePay and your platform.
» wealthboxURL body string false This is used to easily navigate to Wealthbox from AdvicePay. This URL must begin with https://app.crmworkspace.com/contacts/.
» metadata body object false This is used to populate the metadata for the client.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "email": "example@advicepay.com",
  "externalID": "abc123",
  "firstName": "first",
  "lastName": "last",
  "invoiceDisplayName": "",
  "advisorID": 1,
  "verified": false,
  "wealthboxURL": "",
  "metadata": {
    "Phone": "888-888-8888"
  },
  "advisor": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "verified": true,
    "roleTitle": "Advisor",
    "completedOnboarding": true,
    "officeID": 1,
    "metadata": {
      "Phone": "888-888-8888"
    }
  }
}

Responses

Status Meaning Description Schema
200 OK Successfully created the client. Client

Get a Client

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/clients/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/clients/{id}";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/clients/{id} HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/clients/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/clients/{id}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/clients/{id}', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/clients/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/clients/{id}

Retrieve details of a specific client by their ID.

This endpoint retrieves the full details of a single client by their unique identifier.

Parameters

Name In Type Required Description
id path string true The unique identifier of the client to fetch.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "email": "example@advicepay.com",
  "externalID": "abc123",
  "firstName": "first",
  "lastName": "last",
  "invoiceDisplayName": "",
  "advisorID": 1,
  "verified": false,
  "wealthboxURL": "",
  "metadata": {
    "Phone": "888-888-8888"
  },
  "advisor": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "verified": true,
    "roleTitle": "Advisor",
    "completedOnboarding": true,
    "officeID": 1,
    "metadata": {
      "Phone": "888-888-8888"
    }
  }
}

Responses

Status Meaning Description Schema
200 OK The requested client. Client

Update a Client

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PUT", "https://app.advicepay.com/api/public/v1/clients/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    
    
    /// Make a dummy request
    public async Task MakePutRequest()
    {
      int id = 1;
      string url = "https://app.advicepay.com/api/public/v1/clients/{id}";

      
      
      var result = await PutAsync(id, null, url);
          
    }

    /// Performs a PUT Request
    public async Task PutAsync(int id, undefined content, string url)
    {
        //Serialize Object
        StringContent jsonContent = SerializeObject(content);

        //Execute PUT request
        HttpResponseMessage response = await Client.PutAsync(url + $"/{id}", jsonContent);

        //Return response
        return await DeserializeObject(response);
    }
    
    
    /// Serialize an object to Json
    private StringContent SerializeObject(undefined content)
    {
        //Serialize Object
        string jsonObject = JsonConvert.SerializeObject(content);

        //Create Json UTF8 String Content
        return new StringContent(jsonObject, Encoding.UTF8, "application/json");
    }
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
PUT https://app.advicepay.com/api/public/v1/clients/{id} HTTP/1.1
Host: app.advicepay.com
Content-Type: application/json
Accept: application/json

URL obj = new URL("https://app.advicepay.com/api/public/v1/clients/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PUT");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
const inputBody = '{
  "email": "example@advicepay.com",
  "externalID": "abc123",
  "firstName": "first",
  "lastName": "last",
  "invoiceDisplayName": "",
  "advisorID": 1,
  "disableDirectLogin": false,
  "ssoID": "unique_sso_id",
  "wealthboxURL": "https://app.crmworkspace.com/contacts/12345",
  "metadata": {
    "Input Field": "Test Input",
    "Dropdown Field": "Option 2",
    "Multi Tag Field": [
      "a",
      "b",
      "c"
    ]
  }
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/clients/{id}',
{
  method: 'PUT',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.put('https://app.advicepay.com/api/public/v1/clients/{id}', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.put 'https://app.advicepay.com/api/public/v1/clients/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

PUT /api/public/v1/clients/{id}

Update details of an existing client.

This endpoint allows you to update the details of a client. Required Permissions: User must be a Managing Advisor, Full-access Advisor, or Admin.

Body parameter

{
  "email": "example@advicepay.com",
  "externalID": "abc123",
  "firstName": "first",
  "lastName": "last",
  "invoiceDisplayName": "",
  "advisorID": 1,
  "disableDirectLogin": false,
  "ssoID": "unique_sso_id",
  "wealthboxURL": "https://app.crmworkspace.com/contacts/12345",
  "metadata": {
    "Input Field": "Test Input",
    "Dropdown Field": "Option 2",
    "Multi Tag Field": [
      "a",
      "b",
      "c"
    ]
  }
}

Parameters

Name In Type Required Description
id path string true The unique identifier of the client to update.
body body object true The fields to update for the client.
» email body string false Email is validated for correct format and uniqueness. Client emails can only be updated before the client or their authorized users create a payment method. If not sent, the existing email will be maintained.
» externalID body string false No validation or formatting enforced. If the authorized user does not have permission to change Client IDs, any provided value will be ignored. If not sent, the existing external ID will be maintained.
» firstName body string false Trailing or leading whitespaces will be trimmed. If not sent, the existing first name will be maintained.
» lastName body string false Trailing or leading whitespaces will be trimmed. If not sent, the existing last name will be maintained.
» invoiceDisplayName body string false The name to display on invoices. Trailing or leading whitespaces will be trimmed. If not sent, the existing invoice display name will be maintained.
» advisorID body number false This will create the client-advisor relationship. If not sent, the existing advisor ID will be maintained.
» disableDirectLogin body boolean false If set to true, the client will only be able to log in using SSO.
» ssoID body string false Required if disableDirectLogin is true. This ID is used to create the SSO link between AdvicePay and your platform.
» wealthboxURL body string false This is used to navigate to Wealthbox from AdvicePay. Must begin with https://app.crmworkspace.com/contacts/. If not sent, the existing Wealthbox URL will be maintained.
» metadata body object false This is used to populate the metadata for the client.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "email": "example@advicepay.com",
  "externalID": "abc123",
  "firstName": "first",
  "lastName": "last",
  "invoiceDisplayName": "",
  "advisorID": 1,
  "verified": false,
  "wealthboxURL": "",
  "metadata": {
    "Phone": "888-888-8888"
  },
  "advisor": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "verified": true,
    "roleTitle": "Advisor",
    "completedOnboarding": true,
    "officeID": 1,
    "metadata": {
      "Phone": "888-888-8888"
    }
  }
}

Responses

Status Meaning Description Schema
200 OK Successfully updated the client. Client

Custom Attributes

List Client Attributes

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/client_attributes", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/client_attributes";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/client_attributes HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/client_attributes");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/client_attributes',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/client_attributes', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/client_attributes',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/client_attributes

List Client Attributes

Returns a list of custom attributes sorted by createdAt in descending order.

Parameters

Name In Type Required Description
page query number false Determines which page to return.
perPage query number false Determines the number of records to return. Maximum is 100.

Example responses

200 Response

{
  "items": [
    {
      "id": 1,
      "createdAt": 1588366251,
      "updatedAt": 1588623099,
      "deletedAt": 0,
      "name": "My Text Field",
      "type": "text",
      "options": [],
      "description": "Enter text in this field",
      "order": 1,
      "required": true,
      "visible": true
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Responses

Status Meaning Description Schema
200 OK Successful response with a list of custom attributes. CustomAttributeList

List Advisor Attributes

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/advisor_attributes", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/advisor_attributes";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/advisor_attributes HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/advisor_attributes");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/advisor_attributes',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/advisor_attributes', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/advisor_attributes',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/advisor_attributes

List Advisor Attributes

Returns a list of custom attributes sorted by createdAt in descending order.

Parameters

Name In Type Required Description
page query number false Determines which page to return.
perPage query number false Determines the number of records to return. Maximum is 100.

Example responses

200 Response

{
  "items": [
    {
      "id": 1,
      "createdAt": 1588366251,
      "updatedAt": 1588623099,
      "deletedAt": 0,
      "name": "My Text Field",
      "type": "text",
      "options": [],
      "description": "Enter text in this field",
      "order": 1,
      "required": true,
      "visible": true
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Responses

Status Meaning Description Schema
200 OK Successful response with a list of advisor attributes. CustomAttributeList

Deliverables

List Deliverable Templates

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/deliverable_templates", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/deliverable_templates";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/deliverable_templates HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/deliverable_templates");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/deliverable_templates',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/deliverable_templates', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/deliverable_templates',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/deliverable_templates

List Deliverable Templates

Returns a list of deliverable templates sorted by createdAt in descending order.

Parameters

Name In Type Required Description
page query number false This will determine which page to return.
perPage query number false This will determine the number of records to return. Maximum is 100.

Example responses

200 Response

{
  "items": [
    {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "name": "My Template",
      "detailedEvidenceTypes": {
        "file": {
          "visible": true,
          "required": true
        },
        "url": {
          "visible": true,
          "required": true
        },
        "esign": {
          "visible": true,
          "required": true
        },
        "notes": {
          "visible": true,
          "required": true
        },
        "attestation": {
          "visible": true,
          "required": true
        }
      },
      "esignTemplateExternalID": "ext123",
      "dueDateType": "calculate",
      "dueDateIntervalType": "years",
      "dueDateInterval": 1,
      "dueDateTrigger": "invoice_paid",
      "recurring": true,
      "recurringIntervalType": "years",
      "recurringInterval": 1,
      "recurringTrigger": "last_completed_deliverable",
      "maxRecurrence": 2,
      "allowedFileTypes": [
        ".png",
        ".jpg",
        ".pdf",
        ".docx"
      ]
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Responses

Status Meaning Description Schema
200 OK Successful response with a list of deliverable templates. DeliverableTemplateList

Create a Deliverable Template

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://app.advicepay.com/api/public/v1/deliverable_templates", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    
    /// Make a dummy request
    public async Task MakePostRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/deliverable_templates";
      
      
      await PostAsync(null, url);
      
    }

    /// Performs a POST Request
    public async Task PostAsync(undefined content, string url)
    {
        //Serialize Object
        StringContent jsonContent = SerializeObject(content);

        //Execute POST request
        HttpResponseMessage response = await Client.PostAsync(url, jsonContent);
    }
    
    
    
    /// Serialize an object to Json
    private StringContent SerializeObject(undefined content)
    {
        //Serialize Object
        string jsonObject = JsonConvert.SerializeObject(content);

        //Create Json UTF8 String Content
        return new StringContent(jsonObject, Encoding.UTF8, "application/json");
    }
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
POST https://app.advicepay.com/api/public/v1/deliverable_templates HTTP/1.1
Host: app.advicepay.com
Content-Type: application/json
Accept: application/json

URL obj = new URL("https://app.advicepay.com/api/public/v1/deliverable_templates");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
const inputBody = '{
  "name": "My Template",
  "dueDateType": "calculate",
  "dueDateIntervalType": "years",
  "dueDateInterval": 1,
  "dueDateTrigger": "invoice_paid",
  "recurring": false,
  "recurringIntervalType": "",
  "recurringInterval": 0,
  "recurringTrigger": "",
  "maxRecurrence": 0,
  "esignTemplateExternalID": "ext123",
  "allowedFileTypes": [
    ".pdf",
    ".png",
    ".docx",
    ".jpg"
  ],
  "detailedEvidenceTypes": {
    "file": {
      "visible": true,
      "required": true
    },
    "url": {
      "visible": true,
      "required": true
    },
    "esign": {
      "visible": true,
      "required": true
    },
    "notes": {
      "visible": true,
      "required": true
    },
    "attestation": {
      "visible": true,
      "required": true
    }
  }
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/deliverable_templates',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.post('https://app.advicepay.com/api/public/v1/deliverable_templates', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.post 'https://app.advicepay.com/api/public/v1/deliverable_templates',
  params: {
  }, headers: headers

p JSON.parse(result)

POST /api/public/v1/deliverable_templates

Create a Deliverable Template

Creates a new deliverable template. Requires the user to be a Full-access Advisor or Admin.

Body parameter

{
  "name": "My Template",
  "dueDateType": "calculate",
  "dueDateIntervalType": "years",
  "dueDateInterval": 1,
  "dueDateTrigger": "invoice_paid",
  "recurring": false,
  "recurringIntervalType": "",
  "recurringInterval": 0,
  "recurringTrigger": "",
  "maxRecurrence": 0,
  "esignTemplateExternalID": "ext123",
  "allowedFileTypes": [
    ".pdf",
    ".png",
    ".docx",
    ".jpg"
  ],
  "detailedEvidenceTypes": {
    "file": {
      "visible": true,
      "required": true
    },
    "url": {
      "visible": true,
      "required": true
    },
    "esign": {
      "visible": true,
      "required": true
    },
    "notes": {
      "visible": true,
      "required": true
    },
    "attestation": {
      "visible": true,
      "required": true
    }
  }
}

Parameters

Name In Type Required Description
body body object true none
» name body string true The name of the template.
» dueDateType body string true Determines whether the due date is specified directly or calculated. Valid values are specify or calculate.
» dueDateIntervalType body string false The interval type used to determine when the deliverable is due. Valid values are days, weeks, months, or years.
» dueDateInterval body number false The interval specified in dueDateIntervalType units.
» dueDateTrigger body string false The trigger used to calculate when the deliverable is due. Valid values are invoice_paid or agreement_signed.
» recurring body boolean false Indicates whether the deliverable will recur automatically.
» recurringIntervalType body string false The interval type used to determine when the recurring deliverable is due. Valid values are days, weeks, months, or years.
» recurringInterval body number false The interval specified in recurringIntervalType units.
» recurringTrigger body string false The trigger used to calculate when the recurring deliverable is due. Valid value is last_completed_deliverable.
» maxRecurrence body number false The total number of deliverables owed.
» esignTemplateExternalID body string false The eSign template that will be used for evidence if esign is included in detailedEvidenceTypes.
» allowedFileTypes body [string] false The only file types that can be submitted on a deliverable. Valid file types are .png, .jpg, .pdf, and .docx.
» detailedEvidenceTypes body DetailedEvidenceType true The types of evidence that can be used for the template. At least one piece of evidence type is required.
»» file body DeliverableEvidence false A single piece of evidence for a deliverable
»»» visible body boolean false Indicates if the evidence is visible.
»»» required body boolean false Indicates if the evidence is required.
»» url body DeliverableEvidence false A single piece of evidence for a deliverable
»» esign body DeliverableEvidence false A single piece of evidence for a deliverable
»» notes body DeliverableEvidence false A single piece of evidence for a deliverable
»» attestation body DeliverableEvidence false A single piece of evidence for a deliverable

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "name": "My Template",
  "detailedEvidenceTypes": {
    "file": {
      "visible": true,
      "required": true
    },
    "url": {
      "visible": true,
      "required": true
    },
    "esign": {
      "visible": true,
      "required": true
    },
    "notes": {
      "visible": true,
      "required": true
    },
    "attestation": {
      "visible": true,
      "required": true
    }
  },
  "esignTemplateExternalID": "ext123",
  "dueDateType": "calculate",
  "dueDateIntervalType": "years",
  "dueDateInterval": 1,
  "dueDateTrigger": "invoice_paid",
  "recurring": true,
  "recurringIntervalType": "years",
  "recurringInterval": 1,
  "recurringTrigger": "last_completed_deliverable",
  "maxRecurrence": 2,
  "allowedFileTypes": [
    ".png",
    ".jpg",
    ".pdf",
    ".docx"
  ]
}

Responses

Status Meaning Description Schema
200 OK The newly created deliverable template object. DeliverableTemplate

Get a Deliverable Template

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/deliverable_templates/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/deliverable_templates/{id}";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/deliverable_templates/{id} HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/deliverable_templates/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/deliverable_templates/{id}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/deliverable_templates/{id}', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/deliverable_templates/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/deliverable_templates/{id}

Get a Deliverable Template

Fetches the details of a specific deliverable template using its unique ID.

Parameters

Name In Type Required Description
id path number true The ID of the deliverable template to fetch.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "name": "My Template",
  "detailedEvidenceTypes": {
    "file": {
      "visible": true,
      "required": true
    },
    "url": {
      "visible": true,
      "required": true
    },
    "esign": {
      "visible": true,
      "required": true
    },
    "notes": {
      "visible": true,
      "required": true
    },
    "attestation": {
      "visible": true,
      "required": true
    }
  },
  "esignTemplateExternalID": "ext123",
  "dueDateType": "calculate",
  "dueDateIntervalType": "years",
  "dueDateInterval": 1,
  "dueDateTrigger": "invoice_paid",
  "recurring": true,
  "recurringIntervalType": "years",
  "recurringInterval": 1,
  "recurringTrigger": "last_completed_deliverable",
  "maxRecurrence": 2,
  "allowedFileTypes": [
    ".png",
    ".jpg",
    ".pdf",
    ".docx"
  ]
}

Responses

Status Meaning Description Schema
200 OK Successful response with the requested deliverable template. DeliverableTemplate

Update a Deliverable Template

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PUT", "https://app.advicepay.com/api/public/v1/deliverable_templates/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    
    
    /// Make a dummy request
    public async Task MakePutRequest()
    {
      int id = 1;
      string url = "https://app.advicepay.com/api/public/v1/deliverable_templates/{id}";

      
      
      var result = await PutAsync(id, null, url);
          
    }

    /// Performs a PUT Request
    public async Task PutAsync(int id, undefined content, string url)
    {
        //Serialize Object
        StringContent jsonContent = SerializeObject(content);

        //Execute PUT request
        HttpResponseMessage response = await Client.PutAsync(url + $"/{id}", jsonContent);

        //Return response
        return await DeserializeObject(response);
    }
    
    
    /// Serialize an object to Json
    private StringContent SerializeObject(undefined content)
    {
        //Serialize Object
        string jsonObject = JsonConvert.SerializeObject(content);

        //Create Json UTF8 String Content
        return new StringContent(jsonObject, Encoding.UTF8, "application/json");
    }
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
PUT https://app.advicepay.com/api/public/v1/deliverable_templates/{id} HTTP/1.1
Host: app.advicepay.com
Content-Type: application/json
Accept: application/json

URL obj = new URL("https://app.advicepay.com/api/public/v1/deliverable_templates/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PUT");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
const inputBody = '{
  "name": "My Template",
  "dueDateType": "calculate",
  "dueDateIntervalType": "years",
  "dueDateInterval": 1,
  "dueDateTrigger": "invoice_paid",
  "recurring": false,
  "recurringIntervalType": "",
  "recurringInterval": 0,
  "recurringTrigger": "",
  "maxRecurrence": 0,
  "esignTemplateExternalID": "ext123",
  "allowedFileTypes": [
    ".pdf",
    ".png",
    ".docx",
    ".jpg"
  ],
  "detailedEvidenceTypes": {
    "file": {
      "visible": true,
      "required": true
    },
    "url": {
      "visible": true,
      "required": true
    },
    "esign": {
      "visible": true,
      "required": true
    },
    "notes": {
      "visible": true,
      "required": true
    },
    "attestation": {
      "visible": true,
      "required": true
    }
  }
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/deliverable_templates/{id}',
{
  method: 'PUT',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.put('https://app.advicepay.com/api/public/v1/deliverable_templates/{id}', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.put 'https://app.advicepay.com/api/public/v1/deliverable_templates/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

PUT /api/public/v1/deliverable_templates/{id}

Update a Deliverable Template

Updates an existing deliverable template. Requires the user to be a Full-access Advisor or Admin.

Body parameter

{
  "name": "My Template",
  "dueDateType": "calculate",
  "dueDateIntervalType": "years",
  "dueDateInterval": 1,
  "dueDateTrigger": "invoice_paid",
  "recurring": false,
  "recurringIntervalType": "",
  "recurringInterval": 0,
  "recurringTrigger": "",
  "maxRecurrence": 0,
  "esignTemplateExternalID": "ext123",
  "allowedFileTypes": [
    ".pdf",
    ".png",
    ".docx",
    ".jpg"
  ],
  "detailedEvidenceTypes": {
    "file": {
      "visible": true,
      "required": true
    },
    "url": {
      "visible": true,
      "required": true
    },
    "esign": {
      "visible": true,
      "required": true
    },
    "notes": {
      "visible": true,
      "required": true
    },
    "attestation": {
      "visible": true,
      "required": true
    }
  }
}

Parameters

Name In Type Required Description
id path number true The ID of the deliverable template to update.
body body object true none
» name body string false The name of the template.
» dueDateType body string false Determines whether the due date is specified directly or calculated. Valid values are specify or calculate.
» dueDateIntervalType body string false The interval type used to determine when the deliverable is due. Valid values are days, weeks, months, or years.
» dueDateInterval body number false The interval specified in dueDateIntervalType units.
» dueDateTrigger body string false The trigger used to calculate when the deliverable is due. Valid values are invoice_paid or agreement_signed.
» recurring body boolean false Indicates whether the deliverable will recur automatically.
» recurringIntervalType body string false The interval type used to determine when the recurring deliverable is due. Valid values are days, weeks, months, or “years”.
» recurringInterval body number false The interval specified in recurringIntervalType units.
» recurringTrigger body string false The trigger used to calculate when the recurring deliverable is due. Valid value is last_completed_deliverable.
» maxRecurrence body number false The total number of deliverables owed.
» esignTemplateExternalID body string false The eSign template that will be used for evidence if esign is included in detailedEvidenceTypes.
» allowedFileTypes body [string] false The only file types that can be submitted on a deliverable. Valid file types are .png, .jpg, .pdf, .docx.
» detailedEvidenceTypes body DetailedEvidenceType false The types of evidence that can be used for the template. At least one piece of evidence type is required.
»» file body DeliverableEvidence false A single piece of evidence for a deliverable
»»» visible body boolean false Indicates if the evidence is visible.
»»» required body boolean false Indicates if the evidence is required.
»» url body DeliverableEvidence false A single piece of evidence for a deliverable
»» esign body DeliverableEvidence false A single piece of evidence for a deliverable
»» notes body DeliverableEvidence false A single piece of evidence for a deliverable
»» attestation body DeliverableEvidence false A single piece of evidence for a deliverable

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "name": "My Template",
  "detailedEvidenceTypes": {
    "file": {
      "visible": true,
      "required": true
    },
    "url": {
      "visible": true,
      "required": true
    },
    "esign": {
      "visible": true,
      "required": true
    },
    "notes": {
      "visible": true,
      "required": true
    },
    "attestation": {
      "visible": true,
      "required": true
    }
  },
  "esignTemplateExternalID": "ext123",
  "dueDateType": "calculate",
  "dueDateIntervalType": "years",
  "dueDateInterval": 1,
  "dueDateTrigger": "invoice_paid",
  "recurring": true,
  "recurringIntervalType": "years",
  "recurringInterval": 1,
  "recurringTrigger": "last_completed_deliverable",
  "maxRecurrence": 2,
  "allowedFileTypes": [
    ".png",
    ".jpg",
    ".pdf",
    ".docx"
  ]
}

Responses

Status Meaning Description Schema
200 OK The updated deliverable template object. DeliverableTemplate

List Deliverables

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/deliverables", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/deliverables";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/deliverables HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/deliverables");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/deliverables',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/deliverables', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/deliverables',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/deliverables

List Deliverables

Returns a list of deliverables sorted by createdAt in descending order.

Parameters

Name In Type Required Description
page query number false Determines which page to return.
perPage query number false Determines the number of records to return. Maximum is 100.
statuses query array[string] false Filters deliverables by the specified statuses. Valid values are open, complete, upcoming, and past_due.
advisorIDs query array[string] false Filters deliverables for the specified advisors.
clientIDs query array[string] false Filters deliverables for the specified clients.
engagementID query number false Filters deliverables with the specified engagement ID.
dueDateMin query number false Filters deliverables with a minimum due date of the specified Unix epoch.
dueDateMax query number false Filters deliverables with a maximum due date of the specified Unix epoch.
completedAfter query number false Filters deliverables by a minimum completedAt timestamp.
completedBefore query number false Filters deliverables by a maximum completedAt timestamp.
updatedAfter query number false Filters deliverables by a minimum updatedAt timestamp.
updatedBefore query number false Filters deliverables by a maximum updatedAt timestamp.

Example responses

200 Response

{
  "items": [
    {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "advisorID": 1,
      "clientID": 2,
      "engagementID": 3,
      "status": "open",
      "templateName": "My Template",
      "triggerDate": 1551201268,
      "dueDate": 1551201268,
      "attestation": false,
      "notes": "I have uploaded the agreement to long-term storage.",
      "urls": [],
      "fileNames": [],
      "allowedFileTypes": [],
      "intervalType": "years",
      "interval": 1,
      "trigger": "invoice_paid",
      "advisor": {
        "id": 1,
        "createdAt": 1551201267,
        "updatedAt": 1551201267,
        "deletedAt": 0,
        "email": "example@advicepay.com",
        "externalID": "abc123",
        "firstName": "first",
        "lastName": "last",
        "verified": true,
        "roleTitle": "Advisor",
        "completedOnboarding": true,
        "officeID": 1,
        "metadata": {
          "Phone": "888-888-8888"
        }
      },
      "client": {
        "id": 1,
        "createdAt": 1551201267,
        "updatedAt": 1551201267,
        "deletedAt": 0,
        "email": "example@advicepay.com",
        "externalID": "abc123",
        "firstName": "first",
        "lastName": "last",
        "invoiceDisplayName": "",
        "advisorID": 1,
        "verified": false,
        "wealthboxURL": "",
        "metadata": {
          "Phone": "888-888-8888"
        },
        "advisor": {
          "id": 1,
          "createdAt": 1551201267,
          "updatedAt": 1551201267,
          "deletedAt": 0,
          "email": "example@advicepay.com",
          "externalID": "abc123",
          "firstName": "first",
          "lastName": "last",
          "verified": true,
          "roleTitle": "Advisor",
          "completedOnboarding": true,
          "officeID": 1,
          "metadata": {
            "Phone": "888-888-8888"
          }
        }
      }
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Responses

Status Meaning Description Schema
200 OK Successful response with a list of deliverables. DeliverableList

Create a Deliverable

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://app.advicepay.com/api/public/v1/deliverables", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    
    /// Make a dummy request
    public async Task MakePostRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/deliverables";
      
      
      await PostAsync(null, url);
      
    }

    /// Performs a POST Request
    public async Task PostAsync(undefined content, string url)
    {
        //Serialize Object
        StringContent jsonContent = SerializeObject(content);

        //Execute POST request
        HttpResponseMessage response = await Client.PostAsync(url, jsonContent);
    }
    
    
    
    /// Serialize an object to Json
    private StringContent SerializeObject(undefined content)
    {
        //Serialize Object
        string jsonObject = JsonConvert.SerializeObject(content);

        //Create Json UTF8 String Content
        return new StringContent(jsonObject, Encoding.UTF8, "application/json");
    }
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
POST https://app.advicepay.com/api/public/v1/deliverables HTTP/1.1
Host: app.advicepay.com
Content-Type: application/json
Accept: application/json

URL obj = new URL("https://app.advicepay.com/api/public/v1/deliverables");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
const inputBody = '{
  "templateID": 0,
  "advisorID": 0,
  "clientID": 0,
  "triggerDate": 0
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/deliverables',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.post('https://app.advicepay.com/api/public/v1/deliverables', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.post 'https://app.advicepay.com/api/public/v1/deliverables',
  params: {
  }, headers: headers

p JSON.parse(result)

POST /api/public/v1/deliverables

Create a Deliverable

Creates a new deliverable. Requires the user to be a Full-access Advisor or Admin.

Body parameter

{
  "templateID": 0,
  "advisorID": 0,
  "clientID": 0,
  "triggerDate": 0
}

Parameters

Name In Type Required Description
body body object true none
» templateID body number true This is the ID of the template to use when creating the deliverable.
» advisorID body number true This will create the deliverable and advisor relationship.
» clientID body number true This will create the deliverable and client relationship.
» triggerDate body number true This is the Unix timestamp used to calculate the date the deliverable is due.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "advisorID": 1,
  "clientID": 2,
  "engagementID": 3,
  "status": "open",
  "templateName": "My Template",
  "triggerDate": 1551201268,
  "dueDate": 1551201268,
  "attestation": false,
  "notes": "I have uploaded the agreement to long-term storage.",
  "urls": [],
  "fileNames": [],
  "allowedFileTypes": [],
  "intervalType": "years",
  "interval": 1,
  "trigger": "invoice_paid",
  "advisor": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "verified": true,
    "roleTitle": "Advisor",
    "completedOnboarding": true,
    "officeID": 1,
    "metadata": {
      "Phone": "888-888-8888"
    }
  },
  "client": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "invoiceDisplayName": "",
    "advisorID": 1,
    "verified": false,
    "wealthboxURL": "",
    "metadata": {
      "Phone": "888-888-8888"
    },
    "advisor": {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "email": "example@advicepay.com",
      "externalID": "abc123",
      "firstName": "first",
      "lastName": "last",
      "verified": true,
      "roleTitle": "Advisor",
      "completedOnboarding": true,
      "officeID": 1,
      "metadata": {
        "Phone": "888-888-8888"
      }
    }
  }
}

Responses

Status Meaning Description Schema
200 OK The newly created deliverable object. Deliverable

Get a Deliverable

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/deliverables/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/deliverables/{id}";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/deliverables/{id} HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/deliverables/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/deliverables/{id}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/deliverables/{id}', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/deliverables/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/deliverables/{id}

Get a Deliverable

Fetches the details of a specific deliverable using its unique ID.

Parameters

Name In Type Required Description
id path number true The ID of the deliverable to fetch.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "advisorID": 1,
  "clientID": 2,
  "engagementID": 3,
  "status": "open",
  "templateName": "My Template",
  "triggerDate": 1551201268,
  "dueDate": 1551201268,
  "attestation": false,
  "notes": "I have uploaded the agreement to long-term storage.",
  "urls": [],
  "fileNames": [],
  "allowedFileTypes": [],
  "intervalType": "years",
  "interval": 1,
  "trigger": "invoice_paid",
  "advisor": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "verified": true,
    "roleTitle": "Advisor",
    "completedOnboarding": true,
    "officeID": 1,
    "metadata": {
      "Phone": "888-888-8888"
    }
  },
  "client": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "invoiceDisplayName": "",
    "advisorID": 1,
    "verified": false,
    "wealthboxURL": "",
    "metadata": {
      "Phone": "888-888-8888"
    },
    "advisor": {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "email": "example@advicepay.com",
      "externalID": "abc123",
      "firstName": "first",
      "lastName": "last",
      "verified": true,
      "roleTitle": "Advisor",
      "completedOnboarding": true,
      "officeID": 1,
      "metadata": {
        "Phone": "888-888-8888"
      }
    }
  }
}

Responses

Status Meaning Description Schema
200 OK Successful response with the requested deliverable. Deliverable

Update a Deliverable

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PUT", "https://app.advicepay.com/api/public/v1/deliverables/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    
    
    /// Make a dummy request
    public async Task MakePutRequest()
    {
      int id = 1;
      string url = "https://app.advicepay.com/api/public/v1/deliverables/{id}";

      
      
      var result = await PutAsync(id, null, url);
          
    }

    /// Performs a PUT Request
    public async Task PutAsync(int id, undefined content, string url)
    {
        //Serialize Object
        StringContent jsonContent = SerializeObject(content);

        //Execute PUT request
        HttpResponseMessage response = await Client.PutAsync(url + $"/{id}", jsonContent);

        //Return response
        return await DeserializeObject(response);
    }
    
    
    /// Serialize an object to Json
    private StringContent SerializeObject(undefined content)
    {
        //Serialize Object
        string jsonObject = JsonConvert.SerializeObject(content);

        //Create Json UTF8 String Content
        return new StringContent(jsonObject, Encoding.UTF8, "application/json");
    }
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
PUT https://app.advicepay.com/api/public/v1/deliverables/{id} HTTP/1.1
Host: app.advicepay.com
Content-Type: application/json
Accept: application/json

URL obj = new URL("https://app.advicepay.com/api/public/v1/deliverables/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PUT");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
const inputBody = '{
  "advisorID": 1,
  "clientID": 2,
  "triggerDate": 1234567
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/deliverables/{id}',
{
  method: 'PUT',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.put('https://app.advicepay.com/api/public/v1/deliverables/{id}', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.put 'https://app.advicepay.com/api/public/v1/deliverables/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

PUT /api/public/v1/deliverables/{id}

Update a Deliverable

Updates an existing deliverable. Requires the user to be a Full-access Advisor or Admin.

Body parameter

{
  "advisorID": 1,
  "clientID": 2,
  "triggerDate": 1234567
}

Parameters

Name In Type Required Description
id path number true The ID of the deliverable to update.
body body object true none
» advisorID body number false This will create the deliverable and advisor relationship. If not sent, the existing advisor ID will be maintained.
» clientID body number false This will create the deliverable and client relationship. If not sent, the existing client ID will be maintained.
» triggerDate body number false This is the Unix timestamp used to calculate the date the deliverable is due. If not sent, the existing trigger date will be maintained.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "advisorID": 1,
  "clientID": 2,
  "engagementID": 3,
  "status": "open",
  "templateName": "My Template",
  "triggerDate": 1551201268,
  "dueDate": 1551201268,
  "attestation": false,
  "notes": "I have uploaded the agreement to long-term storage.",
  "urls": [],
  "fileNames": [],
  "allowedFileTypes": [],
  "intervalType": "years",
  "interval": 1,
  "trigger": "invoice_paid",
  "advisor": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "verified": true,
    "roleTitle": "Advisor",
    "completedOnboarding": true,
    "officeID": 1,
    "metadata": {
      "Phone": "888-888-8888"
    }
  },
  "client": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "invoiceDisplayName": "",
    "advisorID": 1,
    "verified": false,
    "wealthboxURL": "",
    "metadata": {
      "Phone": "888-888-8888"
    },
    "advisor": {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "email": "example@advicepay.com",
      "externalID": "abc123",
      "firstName": "first",
      "lastName": "last",
      "verified": true,
      "roleTitle": "Advisor",
      "completedOnboarding": true,
      "officeID": 1,
      "metadata": {
        "Phone": "888-888-8888"
      }
    }
  }
}

Responses

Status Meaning Description Schema
200 OK The updated deliverable object. Deliverable

Submit a Deliverable

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PUT", "https://app.advicepay.com/api/public/v1/deliverables/{id}/submit", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    
    
    /// Make a dummy request
    public async Task MakePutRequest()
    {
      int id = 1;
      string url = "https://app.advicepay.com/api/public/v1/deliverables/{id}/submit";

      
      
      var result = await PutAsync(id, null, url);
          
    }

    /// Performs a PUT Request
    public async Task PutAsync(int id, undefined content, string url)
    {
        //Serialize Object
        StringContent jsonContent = SerializeObject(content);

        //Execute PUT request
        HttpResponseMessage response = await Client.PutAsync(url + $"/{id}", jsonContent);

        //Return response
        return await DeserializeObject(response);
    }
    
    
    /// Serialize an object to Json
    private StringContent SerializeObject(undefined content)
    {
        //Serialize Object
        string jsonObject = JsonConvert.SerializeObject(content);

        //Create Json UTF8 String Content
        return new StringContent(jsonObject, Encoding.UTF8, "application/json");
    }
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
PUT https://app.advicepay.com/api/public/v1/deliverables/{id}/submit HTTP/1.1
Host: app.advicepay.com
Content-Type: application/json
Accept: application/json

URL obj = new URL("https://app.advicepay.com/api/public/v1/deliverables/{id}/submit");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PUT");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
const inputBody = '{
  "description": "string",
  "attestation": true,
  "notes": "string",
  "url": "string",
  "fileNames": [
    "string"
  ]
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/deliverables/{id}/submit',
{
  method: 'PUT',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.put('https://app.advicepay.com/api/public/v1/deliverables/{id}/submit', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.put 'https://app.advicepay.com/api/public/v1/deliverables/{id}/submit',
  params: {
  }, headers: headers

p JSON.parse(result)

PUT /api/public/v1/deliverables/{id}/submit

Submit a Deliverable

Submits the deliverable with evidence provided by the advisor. Requires the user to be an Advisor or Admin.

Body parameter

{
  "description": "string",
  "attestation": true,
  "notes": "string",
  "url": "string",
  "fileNames": [
    "string"
  ]
}

Parameters

Name In Type Required Description
id path number true The ID of the deliverable to submit.
body body object true none
» description body string false The advisor-defined description of the deliverable, providing additional details.
» attestation body boolean false A boolean indicating whether the advisor attests to “providing the agreed upon services to the client and the included evidence is accurate.”
» notes body string false Notes from the advisor.
» url body string false The URL of the evidence provided by the advisor.
» fileNames body [string] false A collection of file names containing the evidence uploaded by the advisor.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "advisorID": 1,
  "clientID": 2,
  "engagementID": 3,
  "status": "open",
  "templateName": "My Template",
  "triggerDate": 1551201268,
  "dueDate": 1551201268,
  "attestation": false,
  "notes": "I have uploaded the agreement to long-term storage.",
  "urls": [],
  "fileNames": [],
  "allowedFileTypes": [],
  "intervalType": "years",
  "interval": 1,
  "trigger": "invoice_paid",
  "advisor": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "verified": true,
    "roleTitle": "Advisor",
    "completedOnboarding": true,
    "officeID": 1,
    "metadata": {
      "Phone": "888-888-8888"
    }
  },
  "client": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "invoiceDisplayName": "",
    "advisorID": 1,
    "verified": false,
    "wealthboxURL": "",
    "metadata": {
      "Phone": "888-888-8888"
    },
    "advisor": {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "email": "example@advicepay.com",
      "externalID": "abc123",
      "firstName": "first",
      "lastName": "last",
      "verified": true,
      "roleTitle": "Advisor",
      "completedOnboarding": true,
      "officeID": 1,
      "metadata": {
        "Phone": "888-888-8888"
      }
    }
  }
}

Responses

Status Meaning Description Schema
200 OK The updated deliverable object. Deliverable

Get the File Upload URL

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/deliverables/{id}/upload_url", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/deliverables/{id}/upload_url";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/deliverables/{id}/upload_url?fileName=string HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/deliverables/{id}/upload_url?fileName=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/deliverables/{id}/upload_url?fileName=string',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/deliverables/{id}/upload_url', params={
  'fileName': 'string'
}, headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/deliverables/{id}/upload_url',
  params: {
  'fileName' => 'string'
}, headers: headers

p JSON.parse(result)

GET /api/public/v1/deliverables/{id}/upload_url

Get the File Upload URL

Retrieves a pre-signed upload URL for a file. The URL is valid for 5 minutes. Requires the user to be an Advisor or Admin.

Parameters

Name In Type Required Description
id path number true The ID of the deliverable to submit.
fileName query string true The name of the file to be uploaded.

Example responses

200 Response

{
  "uploadURL": "https://ap.s3.amazonaws.com/thepath/myfile.pdf"
}

Responses

Status Meaning Description Schema
200 OK A pre-signed upload URL for the specified file. Inline

Response Schema

Status Code 200

Name Type Required Restrictions Description
» uploadURL string false none The pre-signed URL for uploading the file.

Deliverable File Download

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/deliverables/{id}/files/{fileName}/download", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/deliverables/{id}/files/{fileName}/download";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/deliverables/{id}/files/{fileName}/download HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/deliverables/{id}/files/{fileName}/download");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/deliverables/{id}/files/{fileName}/download',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/deliverables/{id}/files/{fileName}/download', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/deliverables/{id}/files/{fileName}/download',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/deliverables/{id}/files/{fileName}/download

Deliverable File Download

Downloads a file associated with a deliverable. The user must be an Advisor or Admin.

Parameters

Name In Type Required Description
id path number true The ID of the deliverable.
fileName path string true The URL-encoded name of the file to be downloaded.
expect query string false The expected response type. Must be one of binary (default) or json.

Example responses

200 Response

{
  "data": "Binary or JSON with a data property containing base64-encoded data"
}

Responses

Status Meaning Description Schema
200 OK The requested file. Inline

Response Schema

Status Code 200

Name Type Required Restrictions Description
» data string false none Base64-encoded representation of the file.

Engagements

List Engagements

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/engagements", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/engagements";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/engagements HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/engagements");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/engagements',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/engagements', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/engagements',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/engagements

List Engagements

Returns a list of engagements sorted by createdAt in descending order.

Parameters

Name In Type Required Description
page query number false Determines which page to return.
perPage query number false Determines the number of records to return. Maximum is 100.
externalIDs query array[string] false Filters engagements with the specified external IDs.
advisorIDs query array[string] false Filters engagements for the specified advisors.
clientIDs query array[string] false Filters engagements for the specified clients.
createdAfter query number false Filters engagements created after the specified Unix timestamp.
createdBefore query number false Filters engagements created before the specified Unix timestamp.

Example responses

200 Response

{
  "items": [
    {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "advisorID": 1,
      "clientID": 2,
      "externalID": "xyz123",
      "name": "Ongoing engagement",
      "totalEngagementFee": 2000,
      "advisor": {
        "id": 1,
        "createdAt": 1551201267,
        "updatedAt": 1551201267,
        "deletedAt": 0,
        "email": "example@advicepay.com",
        "externalID": "abc123",
        "firstName": "first",
        "lastName": "last",
        "verified": true,
        "roleTitle": "Advisor",
        "completedOnboarding": true,
        "officeID": 1,
        "metadata": {
          "Phone": "888-888-8888"
        }
      },
      "client": {
        "id": 1,
        "createdAt": 1551201267,
        "updatedAt": 1551201267,
        "deletedAt": 0,
        "email": "example@advicepay.com",
        "externalID": "abc123",
        "firstName": "first",
        "lastName": "last",
        "invoiceDisplayName": "",
        "advisorID": 1,
        "verified": false,
        "wealthboxURL": "",
        "metadata": {
          "Phone": "888-888-8888"
        },
        "advisor": {
          "id": 1,
          "createdAt": 1551201267,
          "updatedAt": 1551201267,
          "deletedAt": 0,
          "email": "example@advicepay.com",
          "externalID": "abc123",
          "firstName": "first",
          "lastName": "last",
          "verified": true,
          "roleTitle": "Advisor",
          "completedOnboarding": true,
          "officeID": 1,
          "metadata": {
            "Phone": "888-888-8888"
          }
        }
      },
      "agreements": [
        {}
      ],
      "deliverables": [
        {}
      ],
      "invoices": [
        {}
      ],
      "subscriptions": [
        {}
      ]
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Responses

Status Meaning Description Schema
200 OK Successful response with a list of engagements. EngagementList

Get an Engagement

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/engagements/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/engagements/{id}";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/engagements/{id} HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/engagements/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/engagements/{id}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/engagements/{id}', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/engagements/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/engagements/{id}

Get an Engagement

Fetches the details of a specific engagement using its unique ID.

Parameters

Name In Type Required Description
id path number true The ID of the engagement to fetch.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "advisorID": 1,
  "clientID": 2,
  "externalID": "xyz123",
  "name": "Ongoing engagement",
  "totalEngagementFee": 2000,
  "advisor": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "verified": true,
    "roleTitle": "Advisor",
    "completedOnboarding": true,
    "officeID": 1,
    "metadata": {
      "Phone": "888-888-8888"
    }
  },
  "client": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "invoiceDisplayName": "",
    "advisorID": 1,
    "verified": false,
    "wealthboxURL": "",
    "metadata": {
      "Phone": "888-888-8888"
    },
    "advisor": {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "email": "example@advicepay.com",
      "externalID": "abc123",
      "firstName": "first",
      "lastName": "last",
      "verified": true,
      "roleTitle": "Advisor",
      "completedOnboarding": true,
      "officeID": 1,
      "metadata": {
        "Phone": "888-888-8888"
      }
    }
  },
  "agreements": [
    {}
  ],
  "deliverables": [
    {}
  ],
  "invoices": [
    {}
  ],
  "subscriptions": [
    {}
  ]
}

Responses

Status Meaning Description Schema
200 OK Successful response with the requested engagement. Engagement

Get Revenue for an Engagement

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/engagements/{id}/revenue", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/engagements/{id}/revenue";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/engagements/{id}/revenue HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/engagements/{id}/revenue");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/engagements/{id}/revenue',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/engagements/{id}/revenue', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/engagements/{id}/revenue',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/engagements/{id}/revenue

Get Revenue for an Engagement

Fetches the revenue details for a specific engagement using its unique ID.

Parameters

Name In Type Required Description
id path number true The ID of the engagement whose revenue to calculate.

Example responses

200 Response

{
  "engagementID": 1,
  "projectedRevenue": 1100,
  "totalRevenue": 100
}

Responses

Status Meaning Description Schema
200 OK Successful response with the requested engagement revenue. EngagementRevenue

Get Engagement Summaries

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/engagements/summary", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/engagements/summary";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/engagements/summary HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/engagements/summary");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/engagements/summary',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/engagements/summary', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/engagements/summary',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/engagements/summary

Get Engagement Summaries

Returns a list of engagement summaries sorted by createdAt in descending order.

Parameters

Name In Type Required Description
page query number false Determines which page to return.
perPage query number false Determines the number of records to return. Maximum is 100.
externalIDs query array[string] false Filters summaries for engagements with the specified external IDs.
advisorIDs query array[string] false Filters summaries for engagements for the specified advisors.
clientIDs query array[string] false Filters summaries for engagements for the specified clients.
createdAfter query number false Filters engagements created after the specified Unix timestamp.
createdBefore query number false Filters engagements created before the specified Unix timestamp.
updatedAfter query number false Filters engagements or resources updated after the specified Unix timestamp.

Example responses

200 Response

{
  "items": [
    {
      "id": 1,
      "createdAt": 1699922316,
      "updatedAt": 1701729256,
      "deletedAt": 0,
      "advisorEmail": "example1@advicepay.com",
      "advisorExternalID": "Your_Advisor_External_ID",
      "advisorID": 1,
      "advisorName": "Bob Smith",
      "agreementIDs": [
        123,
        456
      ],
      "clientEmail": "example2@advicepay.com",
      "clientExternalID": "Your_Client_External_ID",
      "clientID": 2,
      "clientMetadata": {
        "My Dropdown": "Option 1"
      },
      "clientName": "Jim Jones",
      "deliverableIDs": [
        1
      ],
      "externalID": "YOUR_ENGAGEMENT_EXTERNAL_ID",
      "invoiceIDs": [
        1,
        2
      ],
      "name": "Standard Engagement",
      "officeID": 1,
      "primaryAgreementCreatedAt": 1699922316,
      "primaryAgreementID": 1,
      "primaryAgreementName": "Financial Planning Agreement",
      "primaryAgreementStatus": "agreement_status_complete",
      "projectedRevenue": 120000,
      "subscriptionIDs": [
        1
      ],
      "totalEngagementFee": 150000,
      "totalRevenue": 40000
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Responses

Status Meaning Description Schema
200 OK Successful response with a list of engagement summaries. EngagementSummaryList

Invoices

List Invoices

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/invoices", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/invoices";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/invoices HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/invoices");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/invoices',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/invoices', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/invoices',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/invoices

List Invoices

Returns a list of invoices sorted by createdAt in descending order.

Parameters

Name In Type Required Description
page query number false Determines which page to return.
perPage query number false Determines the number of records to return. Maximum is 100.
status query string false Filter by invoice status. It will be one of the following. “unpaid” (no action has been taken), “paid” (invoice has been paid and funds have been transferred), “pending_payment” (user has submitted payment and money is transferring to bank account), “pending_processing” (user has submitted payment but subscription has not kicked off yet), “canceled”, “refund_failed”, “pending_approval”, or “approval_rejected”.
frequency query string false Filter by invoice frequency. It will be one of the following. “Single Payment”, “Monthly recurring”, “Quarterly recurring”, “Semi-Annual recurring”, or “Annual recurring”
paidAfter query number false Filters invoices with paidDate after the specified Unix timestamp.
paidBefore query number false Filters invoices with paidDate before the specified Unix timestamp.
advisorID query number false Filter by invoice advisor.
clientID query number false Filter by invoice client.
engagementID query number false Filter by invoice engagement.
updatedAfter query number false Filters invoices with updatedAt after the specified Unix timestamp.
updatedBefore query number false Filters invoices with updatedAt before the specified Unix timestamp.

Example responses

200 Response

{
  "items": [
    {
      "id": 1,
      "createdAt": 1,
      "updatedAt": 1,
      "deletedAt": 0,
      "clientID": 2,
      "advisorID": 1,
      "engagementID": 1,
      "subscriptionID": 1,
      "amount": 10000,
      "description": "My description",
      "invoiceDate": 1551201267,
      "dueDate": 1551201267,
      "failedAt": 1551201267,
      "frequency": "Monthly recurring",
      "number": 1001,
      "paidDate": 1551201267,
      "acceptedPaymentMethods": [
        "ach",
        "ccd"
      ],
      "refundAmount": 0,
      "refundDate": 1551201267,
      "status": "paid",
      "splitRepCode": "string",
      "advancedSplitRepCodes": [
        {
          "advisorExternalID": "extIDa",
          "advisorID": 1,
          "firstName": "First",
          "lastName": "Last",
          "splitPercent": 50
        },
        {
          "advisorExternalID": "extIDb",
          "advisorID": 2,
          "firstName": "Second",
          "lastName": "Advisor",
          "splitPercent": 50
        }
      ],
      "advisor": {
        "id": 1,
        "createdAt": 1551201267,
        "updatedAt": 1551201267,
        "deletedAt": 0,
        "email": "example@advicepay.com",
        "externalID": "abc123",
        "firstName": "first",
        "lastName": "last",
        "verified": true,
        "roleTitle": "Advisor",
        "completedOnboarding": true,
        "officeID": 1,
        "metadata": {
          "Phone": "888-888-8888"
        }
      },
      "client": {
        "id": 1,
        "createdAt": 1551201267,
        "updatedAt": 1551201267,
        "deletedAt": 0,
        "email": "example@advicepay.com",
        "externalID": "abc123",
        "firstName": "first",
        "lastName": "last",
        "invoiceDisplayName": "",
        "advisorID": 1,
        "verified": false,
        "wealthboxURL": "",
        "metadata": {
          "Phone": "888-888-8888"
        },
        "advisor": {
          "id": 1,
          "createdAt": 1551201267,
          "updatedAt": 1551201267,
          "deletedAt": 0,
          "email": "example@advicepay.com",
          "externalID": "abc123",
          "firstName": "first",
          "lastName": "last",
          "verified": true,
          "roleTitle": "Advisor",
          "completedOnboarding": true,
          "officeID": 1,
          "metadata": {
            "Phone": "888-888-8888"
          }
        }
      },
      "serviceDescriptions": [
        "My description",
        "My other description"
      ],
      "payURL": "https://app.advicepay.com/..."
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Responses

Status Meaning Description Schema
200 OK Successful response with a list of invoices. InvoiceList

Create an Invoice

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://app.advicepay.com/api/public/v1/invoices", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    
    /// Make a dummy request
    public async Task MakePostRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/invoices";
      
      
      await PostAsync(null, url);
      
    }

    /// Performs a POST Request
    public async Task PostAsync(undefined content, string url)
    {
        //Serialize Object
        StringContent jsonContent = SerializeObject(content);

        //Execute POST request
        HttpResponseMessage response = await Client.PostAsync(url, jsonContent);
    }
    
    
    
    /// Serialize an object to Json
    private StringContent SerializeObject(undefined content)
    {
        //Serialize Object
        string jsonObject = JsonConvert.SerializeObject(content);

        //Create Json UTF8 String Content
        return new StringContent(jsonObject, Encoding.UTF8, "application/json");
    }
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
POST https://app.advicepay.com/api/public/v1/invoices HTTP/1.1
Host: app.advicepay.com
Content-Type: application/json
Accept: application/json

URL obj = new URL("https://app.advicepay.com/api/public/v1/invoices");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
const inputBody = '{
  "amount": 1000,
  "dueDate": 1551201267,
  "clientID": 1,
  "serviceDescriptions": [
    {
      "title": "Monthly FP",
      "text": "Monthly financial planning services"
    }
  ],
  "advanceBilling": false,
  "externalEngagementID": "eng123",
  "sendAsEmail": true,
  "emailMessage": "Please pay this invoice as your earliest convenience.",
  "acceptedPaymentMethods": [
    "ach",
    "ccd"
  ]
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/invoices',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.post('https://app.advicepay.com/api/public/v1/invoices', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.post 'https://app.advicepay.com/api/public/v1/invoices',
  params: {
  }, headers: headers

p JSON.parse(result)

POST /api/public/v1/invoices

Create an Invoice

Creates a new invoice. Requires the user to be a Managing Advisor, Full-Access Advisor, or Admin.

Body parameter

{
  "amount": 1000,
  "dueDate": 1551201267,
  "clientID": 1,
  "serviceDescriptions": [
    {
      "title": "Monthly FP",
      "text": "Monthly financial planning services"
    }
  ],
  "advanceBilling": false,
  "externalEngagementID": "eng123",
  "sendAsEmail": true,
  "emailMessage": "Please pay this invoice as your earliest convenience.",
  "acceptedPaymentMethods": [
    "ach",
    "ccd"
  ]
}

Parameters

Name In Type Required Description
body body object true none
» amount body number true Number in cents, value must be greater than 50.
» dueDate body number true This is the due date in Unix time. Must be a date in the future.
» clientID body number true This is the AdvicePay ID of the client for which the invoice is intended.
» serviceDescriptions body [ServiceDescriptionRequest] true none
»» title body string false This is the short name to be displayed on the AdvicePay UI.
»» text body string false This is the text to be displayed on the invoice.
» advanceBilling body boolean false Default is false and will bill in arrears. If set to true, will bill in advance.
» externalEngagementID body string false Creating an invoice will create a new engagement. The engagement’s external ID will be set to this value upon creation.
» sendAsEmail body boolean false Default is false. If set to true, an email with a payment link will be sent to the client.
» emailMessage body string false Custom message to be included in the email sent to the client.
» acceptedPaymentMethods body [string] false This is the payment options for the invoice. Must be a string list combination of ach, ccd, or check.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1,
  "updatedAt": 1,
  "deletedAt": 0,
  "clientID": 2,
  "advisorID": 1,
  "engagementID": 1,
  "subscriptionID": 1,
  "amount": 10000,
  "description": "My description",
  "invoiceDate": 1551201267,
  "dueDate": 1551201267,
  "failedAt": 1551201267,
  "frequency": "Monthly recurring",
  "number": 1001,
  "paidDate": 1551201267,
  "acceptedPaymentMethods": [
    "ach",
    "ccd"
  ],
  "refundAmount": 0,
  "refundDate": 1551201267,
  "status": "paid",
  "splitRepCode": "string",
  "advancedSplitRepCodes": [
    {
      "advisorExternalID": "extIDa",
      "advisorID": 1,
      "firstName": "First",
      "lastName": "Last",
      "splitPercent": 50
    },
    {
      "advisorExternalID": "extIDb",
      "advisorID": 2,
      "firstName": "Second",
      "lastName": "Advisor",
      "splitPercent": 50
    }
  ],
  "advisor": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "verified": true,
    "roleTitle": "Advisor",
    "completedOnboarding": true,
    "officeID": 1,
    "metadata": {
      "Phone": "888-888-8888"
    }
  },
  "client": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "invoiceDisplayName": "",
    "advisorID": 1,
    "verified": false,
    "wealthboxURL": "",
    "metadata": {
      "Phone": "888-888-8888"
    },
    "advisor": {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "email": "example@advicepay.com",
      "externalID": "abc123",
      "firstName": "first",
      "lastName": "last",
      "verified": true,
      "roleTitle": "Advisor",
      "completedOnboarding": true,
      "officeID": 1,
      "metadata": {
        "Phone": "888-888-8888"
      }
    }
  },
  "serviceDescriptions": [
    "My description",
    "My other description"
  ],
  "payURL": "https://app.advicepay.com/..."
}

Responses

Status Meaning Description Schema
200 OK The newly created invoice object. Invoice

Get an Invoice

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/invoices/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/invoices/{id}";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/invoices/{id} HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/invoices/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/invoices/{id}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/invoices/{id}', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/invoices/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/invoices/{id}

Get an Invoice

Fetches the details of a specific invoice using its unique ID.

Parameters

Name In Type Required Description
id path number true The ID of the invoice to fetch.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1,
  "updatedAt": 1,
  "deletedAt": 0,
  "clientID": 2,
  "advisorID": 1,
  "engagementID": 1,
  "subscriptionID": 1,
  "amount": 10000,
  "description": "My description",
  "invoiceDate": 1551201267,
  "dueDate": 1551201267,
  "failedAt": 1551201267,
  "frequency": "Monthly recurring",
  "number": 1001,
  "paidDate": 1551201267,
  "acceptedPaymentMethods": [
    "ach",
    "ccd"
  ],
  "refundAmount": 0,
  "refundDate": 1551201267,
  "status": "paid",
  "splitRepCode": "string",
  "advancedSplitRepCodes": [
    {
      "advisorExternalID": "extIDa",
      "advisorID": 1,
      "firstName": "First",
      "lastName": "Last",
      "splitPercent": 50
    },
    {
      "advisorExternalID": "extIDb",
      "advisorID": 2,
      "firstName": "Second",
      "lastName": "Advisor",
      "splitPercent": 50
    }
  ],
  "advisor": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "verified": true,
    "roleTitle": "Advisor",
    "completedOnboarding": true,
    "officeID": 1,
    "metadata": {
      "Phone": "888-888-8888"
    }
  },
  "client": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "invoiceDisplayName": "",
    "advisorID": 1,
    "verified": false,
    "wealthboxURL": "",
    "metadata": {
      "Phone": "888-888-8888"
    },
    "advisor": {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "email": "example@advicepay.com",
      "externalID": "abc123",
      "firstName": "first",
      "lastName": "last",
      "verified": true,
      "roleTitle": "Advisor",
      "completedOnboarding": true,
      "officeID": 1,
      "metadata": {
        "Phone": "888-888-8888"
      }
    }
  },
  "serviceDescriptions": [
    "My description",
    "My other description"
  ],
  "payURL": "https://app.advicepay.com/..."
}

Responses

Status Meaning Description Schema
200 OK Successful response with the requested invoice. Invoice

Download an Invoice PDF

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/octet-stream"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/invoices/{id}/download", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/invoices/{id}/download";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/invoices/{id}/download HTTP/1.1
Host: app.advicepay.com
Accept: application/octet-stream
URL obj = new URL("https://app.advicepay.com/api/public/v1/invoices/{id}/download");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/octet-stream',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/invoices/{id}/download',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/octet-stream',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/invoices/{id}/download', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/octet-stream',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/invoices/{id}/download',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/invoices/{id}/download

Download an Invoice PDF

Downloads a PDF file for a specific invoice using its unique ID. The response can be either a binary file or a Base64-encoded JSON object.

Parameters

Name In Type Required Description
id path number true The ID of the invoice to download.
expect query string false The expected response type. Must be one of “binary” (default) or “json”. If “expect” query parameter is “binary” or omitted, the response will contain the binary representation of the file. The response header will have a “Content-Type” of “application/octet-stream” and “Content-Transfer-Encoding” of “binary”. If “expect” query parameter is “json”, the response will contain a file transfer object with a Base64-encoded representation of the file.

Example responses

200 Response

"Binary or JSON with a data property containing base64-encoded data"

Responses

Status Meaning Description Schema
200 OK The invoice PDF. Inline

Response Schema

Status Code 200

Binary representation of the file.

Name Type Required Restrictions Description
anonymous string(binary) false none Binary representation of the file.

Refund an Invoice

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PUT", "https://app.advicepay.com/api/public/v1/invoices/{id}/refund", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    
    
    /// Make a dummy request
    public async Task MakePutRequest()
    {
      int id = 1;
      string url = "https://app.advicepay.com/api/public/v1/invoices/{id}/refund";

      
      
      var result = await PutAsync(id, null, url);
          
    }

    /// Performs a PUT Request
    public async Task PutAsync(int id, undefined content, string url)
    {
        //Serialize Object
        StringContent jsonContent = SerializeObject(content);

        //Execute PUT request
        HttpResponseMessage response = await Client.PutAsync(url + $"/{id}", jsonContent);

        //Return response
        return await DeserializeObject(response);
    }
    
    
    /// Serialize an object to Json
    private StringContent SerializeObject(undefined content)
    {
        //Serialize Object
        string jsonObject = JsonConvert.SerializeObject(content);

        //Create Json UTF8 String Content
        return new StringContent(jsonObject, Encoding.UTF8, "application/json");
    }
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
PUT https://app.advicepay.com/api/public/v1/invoices/{id}/refund HTTP/1.1
Host: app.advicepay.com
Content-Type: application/json
Accept: application/json

URL obj = new URL("https://app.advicepay.com/api/public/v1/invoices/{id}/refund");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PUT");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
const inputBody = '{
  "amount": 100000,
  "customMessage": "Your refund is on the way"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/invoices/{id}/refund',
{
  method: 'PUT',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.put('https://app.advicepay.com/api/public/v1/invoices/{id}/refund', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.put 'https://app.advicepay.com/api/public/v1/invoices/{id}/refund',
  params: {
  }, headers: headers

p JSON.parse(result)

PUT /api/public/v1/invoices/{id}/refund

Refund an Invoice

Refunds a specified invoice by issuing a partial or full refund.

Body parameter

{
  "amount": 100000,
  "customMessage": "Your refund is on the way"
}

Parameters

Name In Type Required Description
id path number true The ID of the invoice to refund.
body body object true none
» amount body number true Number in cents to refund, value must be greater than 50 and less than or equal to the invoice amount paid.
» customMessage body string false If included, this will be included in the email notifying the client of the refund.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1,
  "updatedAt": 1,
  "deletedAt": 0,
  "clientID": 2,
  "advisorID": 1,
  "engagementID": 1,
  "subscriptionID": 1,
  "amount": 10000,
  "description": "My description",
  "invoiceDate": 1551201267,
  "dueDate": 1551201267,
  "failedAt": 1551201267,
  "frequency": "Monthly recurring",
  "number": 1001,
  "paidDate": 1551201267,
  "acceptedPaymentMethods": [
    "ach",
    "ccd"
  ],
  "refundAmount": 0,
  "refundDate": 1551201267,
  "status": "paid",
  "splitRepCode": "string",
  "advancedSplitRepCodes": [
    {
      "advisorExternalID": "extIDa",
      "advisorID": 1,
      "firstName": "First",
      "lastName": "Last",
      "splitPercent": 50
    },
    {
      "advisorExternalID": "extIDb",
      "advisorID": 2,
      "firstName": "Second",
      "lastName": "Advisor",
      "splitPercent": 50
    }
  ],
  "advisor": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "verified": true,
    "roleTitle": "Advisor",
    "completedOnboarding": true,
    "officeID": 1,
    "metadata": {
      "Phone": "888-888-8888"
    }
  },
  "client": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "invoiceDisplayName": "",
    "advisorID": 1,
    "verified": false,
    "wealthboxURL": "",
    "metadata": {
      "Phone": "888-888-8888"
    },
    "advisor": {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "email": "example@advicepay.com",
      "externalID": "abc123",
      "firstName": "first",
      "lastName": "last",
      "verified": true,
      "roleTitle": "Advisor",
      "completedOnboarding": true,
      "officeID": 1,
      "metadata": {
        "Phone": "888-888-8888"
      }
    }
  },
  "serviceDescriptions": [
    "My description",
    "My other description"
  ],
  "payURL": "https://app.advicepay.com/..."
}

Responses

Status Meaning Description Schema
200 OK The refunded invoice object. Invoice

Notifications

List Notifications

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/notifications", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/notifications";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/notifications HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/notifications");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/notifications',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/notifications', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/notifications',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/notifications

List Notifications

Returns a list of notifications sorted by createdAt in descending order. Requires the user to be the Account Owner or an Admin/Analyst under the Account Owner.

Parameters

Name In Type Required Description
page query number false Determines which page to return.
perPage query number false Determines the number of records to return. Maximum is 100.
advisorID query number false Filter by notification advisor.
clientID query number false Filter by notification client.
createdAfter query number false Filters notifications created after the specified Unix timestamp.
createdBefore query number false Filters notifications created before the specified Unix timestamp.

Example responses

200 Response

{
  "items": [
    {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "advisorID": 1,
      "amount": 100,
      "clientID": 2,
      "invoiceID": 1,
      "subscriptionID": 1,
      "key": "invoice-failed",
      "text": "Invoice #1234 of $1.00 failed"
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Responses

Status Meaning Description Schema
200 OK Successful response with a list of notifications. NotificationList

Offices

List Offices

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/offices", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/offices";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/offices HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/offices");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/offices',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/offices', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/offices',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/offices

List Offices

Returns a list of offices sorted by createdAt in descending order. Only applicable to Enterprise accounts. User must be the Account Owner or an Admin/Analyst under the Account Owner.

Parameters

Name In Type Required Description
page query number false Determines which page to return.
perPage query number false Determines the number of records to return. Maximum is 100.

Example responses

200 Response

{
  "items": [
    {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "name": "Example Office"
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Responses

Status Meaning Description Schema
200 OK Successful response with a list of offices. OfficeList

Create an Office

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://app.advicepay.com/api/public/v1/offices", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    
    /// Make a dummy request
    public async Task MakePostRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/offices";
      
      
      await PostAsync(null, url);
      
    }

    /// Performs a POST Request
    public async Task PostAsync(undefined content, string url)
    {
        //Serialize Object
        StringContent jsonContent = SerializeObject(content);

        //Execute POST request
        HttpResponseMessage response = await Client.PostAsync(url, jsonContent);
    }
    
    
    
    /// Serialize an object to Json
    private StringContent SerializeObject(undefined content)
    {
        //Serialize Object
        string jsonObject = JsonConvert.SerializeObject(content);

        //Create Json UTF8 String Content
        return new StringContent(jsonObject, Encoding.UTF8, "application/json");
    }
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
POST https://app.advicepay.com/api/public/v1/offices HTTP/1.1
Host: app.advicepay.com
Content-Type: application/json
Accept: application/json

URL obj = new URL("https://app.advicepay.com/api/public/v1/offices");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
const inputBody = '{
  "name": "Example Office"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/offices',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.post('https://app.advicepay.com/api/public/v1/offices', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.post 'https://app.advicepay.com/api/public/v1/offices',
  params: {
  }, headers: headers

p JSON.parse(result)

POST /api/public/v1/offices

Create an Office

Creates a new office. Only applicable to Enterprise accounts. Requires the user to be the Account Owner or an Admin under the Account Owner.

Body parameter

{
  "name": "Example Office"
}

Parameters

Name In Type Required Description
body body object true none
» name body string true The name of the office. Trailing or leading whitespace will be trimmed.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "name": "Example Office"
}

Responses

Status Meaning Description Schema
200 OK The newly created office object. Office

Get an Office

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/offices/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/offices/{id}";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/offices/{id} HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/offices/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/offices/{id}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/offices/{id}', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/offices/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/offices/{id}

Get an Office

Fetches the details of a specific office using its unique ID. Only applicable to Enterprise accounts. User must be the Account Owner or an Admin/Analyst under the Account Owner.

Parameters

Name In Type Required Description
id path number true The ID of the office to fetch.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "name": "Example Office"
}

Responses

Status Meaning Description Schema
200 OK Successful response with the requested office details. Office

Update an Office

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PUT", "https://app.advicepay.com/api/public/v1/offices/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    
    
    /// Make a dummy request
    public async Task MakePutRequest()
    {
      int id = 1;
      string url = "https://app.advicepay.com/api/public/v1/offices/{id}";

      
      
      var result = await PutAsync(id, null, url);
          
    }

    /// Performs a PUT Request
    public async Task PutAsync(int id, undefined content, string url)
    {
        //Serialize Object
        StringContent jsonContent = SerializeObject(content);

        //Execute PUT request
        HttpResponseMessage response = await Client.PutAsync(url + $"/{id}", jsonContent);

        //Return response
        return await DeserializeObject(response);
    }
    
    
    /// Serialize an object to Json
    private StringContent SerializeObject(undefined content)
    {
        //Serialize Object
        string jsonObject = JsonConvert.SerializeObject(content);

        //Create Json UTF8 String Content
        return new StringContent(jsonObject, Encoding.UTF8, "application/json");
    }
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
PUT https://app.advicepay.com/api/public/v1/offices/{id} HTTP/1.1
Host: app.advicepay.com
Content-Type: application/json
Accept: application/json

URL obj = new URL("https://app.advicepay.com/api/public/v1/offices/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PUT");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
const inputBody = '{
  "name": "Example Office"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/offices/{id}',
{
  method: 'PUT',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.put('https://app.advicepay.com/api/public/v1/offices/{id}', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.put 'https://app.advicepay.com/api/public/v1/offices/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

PUT /api/public/v1/offices/{id}

Update an Office

Updates the name of a specific office. Only applicable to Enterprise accounts. Requires the user to be the Account Owner or an Admin under the Account Owner.

Body parameter

{
  "name": "Example Office"
}

Parameters

Name In Type Required Description
id path number true The ID of the office to update.
body body object true none
» name body string true The new name of the office. Trailing or leading whitespace will be trimmed.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "name": "Example Office"
}

Responses

Status Meaning Description Schema
200 OK The updated office object. Office

Single Sign On

Requesting Access

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/x-www-form-urlencoded"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://app.advicepay.com/auth/sso", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    
    /// Make a dummy request
    public async Task MakePostRequest()
    {
      string url = "https://app.advicepay.com/auth/sso";
      
      
      await PostAsync(null, url);
      
    }

    /// Performs a POST Request
    public async Task PostAsync(undefined content, string url)
    {
        //Serialize Object
        StringContent jsonContent = SerializeObject(content);

        //Execute POST request
        HttpResponseMessage response = await Client.PostAsync(url, jsonContent);
    }
    
    
    
    /// Serialize an object to Json
    private StringContent SerializeObject(undefined content)
    {
        //Serialize Object
        string jsonObject = JsonConvert.SerializeObject(content);

        //Create Json UTF8 String Content
        return new StringContent(jsonObject, Encoding.UTF8, "application/json");
    }
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
POST https://app.advicepay.com/auth/sso?source=string HTTP/1.1
Host: app.advicepay.com
Content-Type: application/x-www-form-urlencoded
Accept: application/json
URL obj = new URL("https://app.advicepay.com/auth/sso?source=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
const inputBody = '{
  "SAMLResponse": "string",
  "RelayState": "string"
}';
const headers = {
  'Content-Type':'application/x-www-form-urlencoded',
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/auth/sso?source=string',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Content-Type': 'application/x-www-form-urlencoded',
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.post('https://app.advicepay.com/auth/sso', params={
  'source': 'string'
}, headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/x-www-form-urlencoded',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.post 'https://app.advicepay.com/auth/sso',
  params: {
  'source' => 'string'
}, headers: headers

p JSON.parse(result)

POST /auth/sso

*You will need to have your public certificate installed on an AdvicePay server before you are able to make SSO requests. We’ve built a sandbox using our implementation so that it is easy to send test requests to localhost:/auth/sso. You simply need to add your cert to a the project’s root. There is no need to install go, unless you want to modify the library and build it yourself. Running the binary will start a server at localhost:`. If you need access you can email engineering@advicepay.com *

This endpoint creates a session using a link between a 3rd party system (identity provider) and AdvicePay (service provider). If AdvicePay has never seen the user before or the user was not created with a ssoID, they will need to login once to build the relationship between the identity and service provider.

Requesting Access Parameters

Parameter Required Description
Source true The company slug used to determine which certificate to validate against. AdvicePay will provide you with the source once we have you set up in our system.

Requesting Access Arguments

Parameter Required Description
SAMLResponse true This is a base64 encoded string, and is often called the assertion.
RelayState false This can be passed as a relative URL to specify where the user gets redirected to after a successful SAML assertion.

Deep Linking

Many organizations require the ability to deep link into AdvicePay, which can be accomplished using the SSO RelayState. Deep linking is supported on any page within AdvicePay by setting the RelayState to /desiredPage.

Examples:

Deep Linking Parameters

Parameter Description
userID This is the internal AdvicePay ID of the client to preselect.
externalUserID This is the external ID that you have defined on the client to preselect.
externalEngagementID The ID that you want to be populated on the engagement created by this payment request.
engagementID If this payment should be added to an existing engagement, this should be the ID of that engagement.
engagementWorkflowID The ID of the engagement workflow to preselect.
templateID The AdvicePay ID of the eSign template to preselect.
splitRepCode The split rep code to prepopulate (not available if Advanced Split Rep Code is enabled in firm settings).
billingType (“advance” or “arrears”) Whether billing will be in advance or in arrears.

Body parameter

SAMLResponse: string
RelayState: string

Parameters

Name In Type Required Description
source query string true The company slug used to determine which certificate to validate against. AdvicePay will provide you with the source once you are set up in the system.
body body object true The body of the request.
» SAMLResponse body string true This is a base64 encoded string, and is often called the assertion.
» RelayState body string false This can be passed as a relative URL to specify where the user gets redirected to after a successful SAML assertion. Supports deep linking.

Example responses

200 Response

{
  "success": true,
  "redirectURL": "/dashboard"
}

Responses

Status Meaning Description Schema
200 OK The SSO session was successfully created. Inline

Response Schema

Status Code 200

Name Type Required Restrictions Description
» success boolean false none Indicates whether the SSO session was successfully created.
» redirectURL string false none The URL where the user should be redirected after the SAML assertion.

Subscriptions

List Subscriptions

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/subscriptions", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/subscriptions";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/subscriptions HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/subscriptions");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/subscriptions',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/subscriptions', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/subscriptions',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/subscriptions

List Subscriptions

Returns a list of subscriptions sorted by createdAt in descending order.

Parameters

Name In Type Required Description
page query number false Determines which page to return.
perPage query number false Determines the number of records to return. Maximum is 100.
status query string false Filter by subscription status. It will be one of the following. inactive (no action has been taken), canceled (subscription has been canceled), active (subscription has been activated), deleted_by_stripe, paused, completed (subscriptions has completed all billing periods), pending_approval, approval_rejected.
frequency query string false Filter by subscription frequency. It will be one of the following. Single Payment, Monthly recurring, Quarterly recurring, Semi-Annual recurring, or Annual recurring
advisorID query number false Filter by subscription advisor.
clientID query number false Filter by subscription client.
engagementID query number false Filter by subscription engagement.

Example responses

200 Response

{
  "items": [
    {
      "id": 1,
      "createdAt": 1603399833,
      "updatedAt": 1603399833,
      "deletedAt": 0,
      "clientID": 2,
      "advisorID": 1,
      "engagementID": 1,
      "amount": 10000,
      "billingPeriods": 12,
      "billDate": 1603951200,
      "dueDate": 1603951200,
      "frequency": "Monthly recurring",
      "resumeDate": 0,
      "status": "inactive",
      "advisor": {},
      "client": {}
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Responses

Status Meaning Description Schema
200 OK Successful response with a list of subscriptions. SubscriptionList

Create a Subscription

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://app.advicepay.com/api/public/v1/subscriptions", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    
    /// Make a dummy request
    public async Task MakePostRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/subscriptions";
      
      
      await PostAsync(null, url);
      
    }

    /// Performs a POST Request
    public async Task PostAsync(undefined content, string url)
    {
        //Serialize Object
        StringContent jsonContent = SerializeObject(content);

        //Execute POST request
        HttpResponseMessage response = await Client.PostAsync(url, jsonContent);
    }
    
    
    
    /// Serialize an object to Json
    private StringContent SerializeObject(undefined content)
    {
        //Serialize Object
        string jsonObject = JsonConvert.SerializeObject(content);

        //Create Json UTF8 String Content
        return new StringContent(jsonObject, Encoding.UTF8, "application/json");
    }
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
POST https://app.advicepay.com/api/public/v1/subscriptions HTTP/1.1
Host: app.advicepay.com
Content-Type: application/json
Accept: application/json

URL obj = new URL("https://app.advicepay.com/api/public/v1/subscriptions");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());
const inputBody = '{
  "amount": 1000,
  "dueDate": 1551201267,
  "clientID": 2,
  "frequency": "Monthly recurring",
  "serviceDescriptions": [
    {
      "title": "Monthly FP",
      "text": "Monthly financial planning services"
    }
  ],
  "advanceBilling": false,
  "sendAsEmail": false,
  "emailMessage": "Please pay this subscription at your earliest convenience",
  "acceptedPaymentMethods": [
    "ach",
    "ccd"
  ],
  "billingPeriods": 12,
  "otpInvoice": {
    "amount": 10000,
    "dueDate": 1701729256,
    "serviceDescriptions": [
      {
        "title": "Monthly FP",
        "text": "Monthly financial planning services"
      }
    ]
  }
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/subscriptions',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.post('https://app.advicepay.com/api/public/v1/subscriptions', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.post 'https://app.advicepay.com/api/public/v1/subscriptions',
  params: {
  }, headers: headers

p JSON.parse(result)

POST /api/public/v1/subscriptions

Create a Subscription

Creates a new subscription. Requires the user to be a Managing Advisor, Full-Access Advisor, or Admin.

Body parameter

{
  "amount": 1000,
  "dueDate": 1551201267,
  "clientID": 2,
  "frequency": "Monthly recurring",
  "serviceDescriptions": [
    {
      "title": "Monthly FP",
      "text": "Monthly financial planning services"
    }
  ],
  "advanceBilling": false,
  "sendAsEmail": false,
  "emailMessage": "Please pay this subscription at your earliest convenience",
  "acceptedPaymentMethods": [
    "ach",
    "ccd"
  ],
  "billingPeriods": 12,
  "otpInvoice": {
    "amount": 10000,
    "dueDate": 1701729256,
    "serviceDescriptions": [
      {
        "title": "Monthly FP",
        "text": "Monthly financial planning services"
      }
    ]
  }
}

Parameters

Name In Type Required Description
body body object true none
» amount body number true Number in cents, value must be greater than 50.
» dueDate body number true This is the due date in Unix time. Must be a date in the future.
» clientID body number true This is the AdvicePay ID of the client for which the subscription is intended.
» frequency body string true Subscription frequency. Must be one of Monthly recurring, Quarterly recurring, Semi-Annual recurring, or Annual recurring.
» serviceDescriptions body [ServiceDescriptionRequest] true A list of service descriptions that will be displayed on the invoices.
»» title body string false This is the short name to be displayed on the AdvicePay UI.
»» text body string false This is the text to be displayed on the invoice.
» advanceBilling body boolean false Default is false and will bill in arrears. If set to true, will bill in advance.
» sendAsEmail body boolean false Default is false. If set to true, an email with a payment link will be sent to the client.
» emailMessage body string false Custom message to be included in the email sent to the client.
» acceptedPaymentMethods body [string] false Default is [“ach”,“ccd”]. This is the payment options for the subscription. Must be a string list combination of ach, ccd, or check.
» billingPeriods body number false Sets the max billing periods the subscription will bill.
» otpInvoice body OneTimePaymentRequest false none
»» amount body number true Number in cents, value must be greater than 50.
»» dueDate body number true This is the due date in Unix time. Must be a date in the future.
»» serviceDescriptions body [ServiceDescriptionRequest] true A list of service descriptions that will be displayed on the invoices.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1603399833,
  "updatedAt": 1603399833,
  "deletedAt": 0,
  "clientID": 2,
  "advisorID": 1,
  "engagementID": 1,
  "amount": 10000,
  "billingPeriods": 12,
  "billDate": 1603951200,
  "dueDate": 1603951200,
  "frequency": "Monthly recurring",
  "resumeDate": 0,
  "status": "inactive",
  "advisor": {},
  "client": {}
}

Responses

Status Meaning Description Schema
200 OK The newly created subscription object. Subscription

Get a Subscription

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/subscriptions/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/subscriptions/{id}";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/subscriptions/{id} HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/subscriptions/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/subscriptions/{id}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/subscriptions/{id}', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/subscriptions/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/subscriptions/{id}

Get a Subscription

Fetches the details of a specific subscription using its unique ID.

Parameters

Name In Type Required Description
id path number true The ID of the subscription to fetch.

Example responses

200 Response

{
  "id": 1,
  "createdAt": 1603399833,
  "updatedAt": 1603399833,
  "deletedAt": 0,
  "clientID": 2,
  "advisorID": 1,
  "engagementID": 1,
  "amount": 10000,
  "billingPeriods": 12,
  "billDate": 1603951200,
  "dueDate": 1603951200,
  "frequency": "Monthly recurring",
  "resumeDate": 0,
  "status": "inactive",
  "advisor": {},
  "client": {}
}

Responses

Status Meaning Description Schema
200 OK Successful response with the requested subscription. Subscription

Transfers

List Transfers

Code samples

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "Authorization": []string{"Bearer {access-token}"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://app.advicepay.com/api/public/v1/transfers", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
    private HttpClient Client { get; set; }

    /// <<summary>>
    /// Setup http client
    /// <</summary>>
    public HttpExample()
    {
      Client = new HttpClient();
    }
    
    /// Make a dummy request
    public async Task MakeGetRequest()
    {
      string url = "https://app.advicepay.com/api/public/v1/transfers";
      var result = await GetAsync(url);
    }

    /// Performs a GET Request
    public async Task GetAsync(string url)
    {
        //Start the request
        HttpResponseMessage response = await Client.GetAsync(url);

        //Validate result
        response.EnsureSuccessStatusCode();

    }
    
    
    
    
    /// Deserialize object from request response
    private async Task DeserializeObject(HttpResponseMessage response)
    {
        //Read body 
        string responseBody = await response.Content.ReadAsStringAsync();

        //Deserialize Body to object
        var result = JsonConvert.DeserializeObject(responseBody);
    }
}
GET https://app.advicepay.com/api/public/v1/transfers HTTP/1.1
Host: app.advicepay.com
Accept: application/json
URL obj = new URL("https://app.advicepay.com/api/public/v1/transfers");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

const headers = {
  'Accept':'application/json',
  'Authorization':'Bearer {access-token}'
};

fetch('https://app.advicepay.com/api/public/v1/transfers',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});
import requests
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer {access-token}'
}

r = requests.get('https://app.advicepay.com/api/public/v1/transfers', headers = headers)

print(r.json())
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get 'https://app.advicepay.com/api/public/v1/transfers',
  params: {
  }, headers: headers

p JSON.parse(result)

GET /api/public/v1/transfers

List Transfers

Retrieves a list of transfers, filtered by optional query parameters. Transfers are sorted by arrivalDate in descending order.

Parameters

Name In Type Required Description
arrivalAfter query number false This is a Unix timestamp to filter for transfers with arrivalDate after this timestamp.
arrivalBefore query number false This is a Unix timestamp to filter for transfers with arrivalDate before this timestamp.

Example responses

200 Response

{
  "items": [
    {
      "id": "Kok1FeZg9HVyHl4ufXtHl6xBfOS",
      "status": "paid",
      "grossAmount": 1400,
      "bankDeposit": 1321,
      "arrivalDate": 1551201267,
      "paymentCount": 1,
      "feeOverride": 0,
      "transactions": [
        {
          "id": "1FK4P7HVyHl4ufXt73dCbyme",
          "transferID": "Kok1FeZg9HVyHl4ufXtHl6xBfOS",
          "transactionType": "charge",
          "paymentType": "CC",
          "grossAmount": 1400,
          "feeAP": 79,
          "feeOverride": 0,
          "total": 1321,
          "paidDate": 1551201267,
          "paymentMessage": "Payment successfully processed.",
          "clientName": "First Last",
          "clientExternalID": "extIDc",
          "advisorName": "First Last",
          "advisorEmail": "example@advicepay.com",
          "advisorExternalID": "extIDa",
          "advisorID": 1,
          "agreementID": 1,
          "engagementExternalID": "extEng",
          "engagementID": 1,
          "invoiceID": 1,
          "invoiceNum": 1001,
          "invoiceType": "Single Payment",
          "recurringStartDate": 0,
          "recurringEndDate": 0,
          "invoiceDescription": "First Description",
          "serviceDescriptions": [
            "First description",
            "Second description"
          ],
          "splitRepCode": "string",
          "advancedSplitRepCodes": [
            {
              "advisorExternalID": "extIDa",
              "advisorID": 1,
              "firstName": "First",
              "lastName": "Last",
              "splitPercent": 50
            },
            {
              "advisorExternalID": "extIDb",
              "advisorID": 2,
              "firstName": "Second",
              "lastName": "Advisor",
              "splitPercent": 50
            }
          ]
        }
      ]
    }
  ],
  "perPage": 10,
  "hasMore": false
}

Responses

Status Meaning Description Schema
200 OK A list of transfers. TransferList

Schemas

Advisor

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "email": "example@advicepay.com",
  "externalID": "abc123",
  "firstName": "first",
  "lastName": "last",
  "verified": true,
  "roleTitle": "Advisor",
  "completedOnboarding": true,
  "officeID": 1,
  "metadata": {
    "Phone": "888-888-8888"
  }
}

Properties

Name Type Required Restrictions Description
id number false none This is the advisor’s unique identifier, and should be stored to do any future queries for data belonging to that advisor.
createdAt number false none This is the Unix timestamp for when the advisor was created.
updatedAt number false none This is the Unix timestamp for when the advisor was updated.
deletedAt number false none This is the Unix timestamp for when the advisor was deleted.
email string false none This is the advisor’s email address. Email addresses must be unique for each advisor in your firm.
externalID string false none This is used to specify an identifier from your system in the AdvicePay database.
firstName string false none Advisor’s first name.
lastName string false none Advisor’s last name.
verified boolean false none This boolean reflects whether or not the advisor has verified their email and set a password.
roleTitle string false none This describes the advisor’s specific role, and the implied abilities that go with the role. Possible values:
Full-access Advisor (The user has full permissions to do anything in the firm)
Managing Advisor (The user can manage all records for all advisors within their assigned office)
Advisor (A standard advisor account that can manage their own clients)
No-login Advisor (An account used for recordkeeping that must be managed by a Full-access Advisor or one of their admins)
Read-only Advisor (The advisor only has read permissions)
completedOnboarding boolean false none This boolean is used to determine if the advisor should add banking information, and will be true in most cases when created via the API.
officeID number false none The ID of the office that the advisor has been assigned to.
metadata object false none Any additional information added via a custom attribute will show here.

Admin

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "email": "example@advicepay.com",
  "firstName": "first",
  "lastName": "last",
  "parentID": 1,
  "roleTitle": "Admin",
  "parent": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "verified": true,
    "roleTitle": "Advisor",
    "completedOnboarding": true,
    "officeID": 1,
    "metadata": {
      "Phone": "888-888-8888"
    }
  }
}

Properties

Name Type Required Restrictions Description
id number false none This is the admin’s unique identifier.
createdAt number false none This is the Unix timestamp for when the admin was created.
updatedAt number false none This is the Unix timestamp for when the admin was updated.
deletedAt number false none This is the Unix timestamp for when the admin was deleted.
email string false none This is the admin’s email address. Email addresses must be unique for each admin of an advisor, but the same email may be used for multiple advisors’ admins.
firstName string false none Admin’s first name.
lastName string false none Admin’s last name.
parentID number false none This is the unique ID of the advisor whose account the admin is associated with.
roleTitle string false none This describes the admin’s specific role, and the implied abilities that go with the role. Possible values:
Admin (The user has read and write permissions)
Analyst (The user only has read permissions)
Reviewer (Can make approvals and view-only access to payments)
parent Advisor false none The advisor of the Admin.

AdminList

{
  "items": [
    {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "email": "example@advicepay.com",
      "firstName": "first",
      "lastName": "last",
      "parentID": 1,
      "roleTitle": "Admin",
      "parent": {
        "id": 1,
        "createdAt": 1551201267,
        "updatedAt": 1551201267,
        "deletedAt": 0,
        "email": "example@advicepay.com",
        "externalID": "abc123",
        "firstName": "first",
        "lastName": "last",
        "verified": true,
        "roleTitle": "Advisor",
        "completedOnboarding": true,
        "officeID": 1,
        "metadata": {
          "Phone": "888-888-8888"
        }
      }
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Properties

Name Type Required Restrictions Description
items [Admin] false none The list of items for the current page
page integer false none The current page number in the paginated result set.
perPage integer false none The number of items returned per page.
totalItems integer false none The total number of items available.
totalPages integer false none The total number of pages available.

AdvisorList

{
  "items": [
    {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "email": "example@advicepay.com",
      "externalID": "abc123",
      "firstName": "first",
      "lastName": "last",
      "verified": true,
      "roleTitle": "Advisor",
      "completedOnboarding": true,
      "officeID": 1,
      "metadata": {
        "Phone": "888-888-8888"
      }
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Properties

Name Type Required Restrictions Description
items [Advisor] false none The list of items for the current page
page integer false none The current page number in the paginated result set.
perPage integer false none The number of items returned per page.
totalItems integer false none The total number of items available.
totalPages integer false none The total number of pages available.

eSignTemplate

{
  "name": "ExampleTemplate",
  "description": "Example eSign Template"
}

Properties

Name Type Required Restrictions Description
name string false none This is the name of the template.
description string false none This is the template’s description.

Signer

{
  "agreementID": 1,
  "email": "example@advicepay.com",
  "name": "first last",
  "status": "string",
  "signedAt": 1551201267,
  "completedAt": 1551201267,
  "signingOrder": 0,
  "title": "Client",
  "externalID": "abc123"
}

Properties

Name Type Required Restrictions Description
agreementID number false none This is the unique identifier of the associated agreement.
email string false none This is the email of the signer.
name string false none This is the name of the signer.
status string false none This is the status of the signature. It will be either an empty string or signer_status_complete when the signer has finished signing.
signedAt number false none This is a Unix timestamp for when the signer signed. [DEPRECATED - See completedAt]
completedAt number false none This is a Unix timestamp for when the signer has completed the agreement.
signingOrder number false none If signing order is enabled on the agreement, this number represents the rank of the signer in the order.
title string false none This is the title of the signature role on the document.
externalID string false none This is the identifier from your system in the AdvicePay database. It will be an empty string “” if there is no externalID under the corresponding client or advisor object.

Agreement

{
  "id": 1,
  "completedAt": 1551201267,
  "createdAt": 1551201267,
  "deletedAt": 0,
  "finalizedAt": 1551201268,
  "updatedAt": 1551201268,
  "clientID": 1,
  "advisorID": 2,
  "engagementID": 3,
  "invoiceID": 1,
  "status": "agreement_status_complete",
  "signingOrderEnabled": true,
  "fileNames": [
    "example1.pdf",
    "example2.pdf"
  ],
  "template": {
    "name": "ExampleTemplate",
    "description": "Example eSign Template"
  },
  "signers": [
    {
      "agreementID": 1,
      "email": "example@advicepay.com",
      "name": "first last",
      "status": "string",
      "signedAt": 1551201267,
      "completedAt": 1551201267,
      "signingOrder": 0,
      "title": "Client",
      "externalID": "abc123"
    }
  ]
}

Properties

Name Type Required Restrictions Description
id number false none This is the agreement’s unique identifier.
completedAt number false none This is the Unix timestamp when all signers finished signing and the agreement was marked as complete. For uploaded documents, this is populated via the AdvicePay UI when the advisor uploads them.
createdAt number false none This is the Unix timestamp for when the agreement was created.
deletedAt number false none This is the Unix timestamp for when the agreement was deleted.
finalizedAt number false none This is the Unix timestamp for when the agreement was finalized and marked as ready for download. For eSigned documents, this is the date the last signer signs the document. For uploaded documents, this is the date the document was uploaded.
updatedAt number false none This is the Unix timestamp for when the agreement was updated.
clientID number false none This is the unique AdvicePay ID of the client that the agreement was sent to. If the client record doesn’t exist, the Client ID will be 0.
advisorID number false none This is the unique AdvicePay ID of the advisor that created the agreement.
engagementID number false none This is the ID of the engagement that the agreement belongs to.
invoiceID number false none This is the ID of the invoice that is related to the agreement.
status string false none This is the status of the agreement. Possible values:
agreement_status_created (no action has been taken)
agreement_status_opened (a signer has opened the document)
agreement_status_complete (all signers have signed the document)
agreement_status_voided (the signature request has been canceled)
agreement_status_draft (the signature request needs to be completed before sending)
signingOrderEnabled boolean false none This is true if the agreement was sent to one signer at a time in a specific signing order.
fileNames [string] false none For agreements uploaded to AdvicePay, the collection of file names of the uploaded PDFs. This will be empty if the agreement wasn’t uploaded as a PDF.
template eSignTemplate false none The template on the agreement. This will be null if the agreement was uploaded as a PDF.
signers [Signer] false none The signers on the agreement

AgreementList

{
  "items": [
    {
      "id": 1,
      "completedAt": 1551201267,
      "createdAt": 1551201267,
      "deletedAt": 0,
      "finalizedAt": 1551201268,
      "updatedAt": 1551201268,
      "clientID": 1,
      "advisorID": 2,
      "engagementID": 3,
      "invoiceID": 1,
      "status": "agreement_status_complete",
      "signingOrderEnabled": true,
      "fileNames": [
        "example1.pdf",
        "example2.pdf"
      ],
      "template": {
        "name": "ExampleTemplate",
        "description": "Example eSign Template"
      },
      "signers": [
        {
          "agreementID": 1,
          "email": "example@advicepay.com",
          "name": "first last",
          "status": "string",
          "signedAt": 1551201267,
          "completedAt": 1551201267,
          "signingOrder": 0,
          "title": "Client",
          "externalID": "abc123"
        }
      ]
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Properties

Name Type Required Restrictions Description
items [Agreement] false none The list of items for the current page
page integer false none The current page number in the paginated result set.
perPage integer false none The number of items returned per page.
totalItems integer false none The total number of items available.
totalPages integer false none The total number of pages available.

Client

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "email": "example@advicepay.com",
  "externalID": "abc123",
  "firstName": "first",
  "lastName": "last",
  "invoiceDisplayName": "",
  "advisorID": 1,
  "verified": false,
  "wealthboxURL": "",
  "metadata": {
    "Phone": "888-888-8888"
  },
  "advisor": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "verified": true,
    "roleTitle": "Advisor",
    "completedOnboarding": true,
    "officeID": 1,
    "metadata": {
      "Phone": "888-888-8888"
    }
  }
}

Properties

Name Type Required Restrictions Description
id number false none This is the client’s unique identifier, and should be stored to do any future queries for data belonging to that client.
createdAt number false none This is the Unix timestamp for when the client was created.
updatedAt number false none This is the Unix timestamp for when the client was updated.
deletedAt number false none This is the Unix timestamp for when the client was deleted.
email string false none This is validated for uniqueness.
externalID string false none This is used to specify an identifier from your system in the AdvicePay database.
firstName string false none Client’s first name.
lastName string false none Client’s last name.
invoiceDisplayName string false none The name to display on invoices. If left blank, the client’s first and last name will be used by default.
advisorID number false none This is the unique ID for the client’s advisor.
verified boolean false none This boolean reflects whether or not the client has verified their email and set a password.
wealthboxURL string false none This is used to easily go to Wealthbox from AdvicePay. This URL must begin with https://app.crmworkspace.com/contacts/.
metadata object false none Any additional information added via a custom attribute will show here.
advisor Advisor false none The advisor of the client.

ClientList

{
  "items": [
    {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "email": "example@advicepay.com",
      "externalID": "abc123",
      "firstName": "first",
      "lastName": "last",
      "invoiceDisplayName": "",
      "advisorID": 1,
      "verified": false,
      "wealthboxURL": "",
      "metadata": {
        "Phone": "888-888-8888"
      },
      "advisor": {
        "id": 1,
        "createdAt": 1551201267,
        "updatedAt": 1551201267,
        "deletedAt": 0,
        "email": "example@advicepay.com",
        "externalID": "abc123",
        "firstName": "first",
        "lastName": "last",
        "verified": true,
        "roleTitle": "Advisor",
        "completedOnboarding": true,
        "officeID": 1,
        "metadata": {
          "Phone": "888-888-8888"
        }
      }
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Properties

Name Type Required Restrictions Description
items [Client] false none The list of items for the current page
page integer false none The current page number in the paginated result set.
perPage integer false none The number of items returned per page.
totalItems integer false none The total number of items available.
totalPages integer false none The total number of pages available.

CustomAttribute

{
  "id": 1,
  "createdAt": 1588366251,
  "updatedAt": 1588623099,
  "deletedAt": 0,
  "name": "My Text Field",
  "type": "text",
  "options": [],
  "description": "Enter text in this field",
  "order": 1,
  "required": true,
  "visible": true
}

Properties

Name Type Required Restrictions Description
id number false none This is the attribute’s unique identifier.
createdAt number false none The Unix timestamp for when the attribute was created.
updatedAt number false none The Unix timestamp for when the attribute was updated.
deletedAt number false none The Unix timestamp for when the attribute was deleted.
name string false none The name of the attribute (The field label on the UI).
type string false none The type of the attribute. Values can be text for text inputs select for dropdowns, or `tags for multi-tag fields.
options [string] false none The list of options for the ‘select’ attribute type.
description string false none The friendly description of how to use the attribute.
order number false none The order that the field appears on the screen in the UI.
required boolean false none Indicates whether an entry in the field is required.
visible boolean false none Indicates whether the field is hidden on the UI.

CustomAttributeList

{
  "items": [
    {
      "id": 1,
      "createdAt": 1588366251,
      "updatedAt": 1588623099,
      "deletedAt": 0,
      "name": "My Text Field",
      "type": "text",
      "options": [],
      "description": "Enter text in this field",
      "order": 1,
      "required": true,
      "visible": true
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Properties

Name Type Required Restrictions Description
items [CustomAttribute] false none The list of items for the current page
page integer false none The current page number in the paginated result set.
perPage integer false none The number of items returned per page.
totalItems integer false none The total number of items available.
totalPages integer false none The total number of pages available.

DeliverableEvidence

{
  "visible": true,
  "required": true
}

A single piece of evidence for a deliverable

Properties

Name Type Required Restrictions Description
visible boolean false none Indicates if the evidence is visible.
required boolean false none Indicates if the evidence is required.

DetailedEvidenceType

{
  "file": {
    "visible": true,
    "required": true
  },
  "url": {
    "visible": true,
    "required": true
  },
  "esign": {
    "visible": true,
    "required": true
  },
  "notes": {
    "visible": true,
    "required": true
  },
  "attestation": {
    "visible": true,
    "required": true
  }
}

The types of evidence that can be used for the template. At least one piece of evidence type is required.

Properties

Name Type Required Restrictions Description
file DeliverableEvidence false none Upload a file as evidence.
url DeliverableEvidence false none Enter a URL as evidence.
esign DeliverableEvidence false none Electronically sign a document as evidence.
notes DeliverableEvidence false none Write freehand notes as evidence.
attestation DeliverableEvidence false none Attest that the deliverable is correct.

DeliverableTemplate

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "name": "My Template",
  "detailedEvidenceTypes": {
    "file": {
      "visible": true,
      "required": true
    },
    "url": {
      "visible": true,
      "required": true
    },
    "esign": {
      "visible": true,
      "required": true
    },
    "notes": {
      "visible": true,
      "required": true
    },
    "attestation": {
      "visible": true,
      "required": true
    }
  },
  "esignTemplateExternalID": "ext123",
  "dueDateType": "calculate",
  "dueDateIntervalType": "years",
  "dueDateInterval": 1,
  "dueDateTrigger": "invoice_paid",
  "recurring": true,
  "recurringIntervalType": "years",
  "recurringInterval": 1,
  "recurringTrigger": "last_completed_deliverable",
  "maxRecurrence": 2,
  "allowedFileTypes": [
    ".png",
    ".jpg",
    ".pdf",
    ".docx"
  ]
}

Properties

Name Type Required Restrictions Description
id number false none This is the template’s unique identifier and should be stored to do any future queries for data belonging to that template.
createdAt number false none This is the Unix timestamp for when the template was created.
updatedAt number false none This is the Unix timestamp for when the template was updated.
deletedAt number false none This is the Unix timestamp for when the template was deleted.
name string false none The name of the template.
detailedEvidenceTypes DetailedEvidenceType false none The types of evidence that can be used for the template.
esignTemplateExternalID string false none The eSign template that will be used for evidence if “esign” is included in detailedEvidenceTypes.
dueDateType string false none Determines whether the due date is specified directly or calculated. Valid values are specify or calculate.
dueDateIntervalType string false none The interval type used to determine when the deliverable is due. Valid values are days, weeks, months, and years.
dueDateInterval number false none The interval specified in dueDateIntervalType units.
dueDateTrigger string false none The trigger used to calculate when the deliverable is due. Valid values are invoice_paid and agreement_signed.
recurring boolean false none Recurring deliverables will automatically create a new deliverable when triggered and assign it to the same advisor.
recurringIntervalType string false none The interval type used to determine when the recurring deliverable is due. Valid values are days, weeks, months, and years.
recurringInterval number false none The interval specified in recurringIntervalType units.
recurringTrigger string false none The trigger used to calculate when the recurring deliverable is due. Valid value last_completed_deliverable.
maxRecurrence number false none The total number of deliverables owed.
allowedFileTypes [string] false none The only file types that can be submitted on deliverables. Valid file types are .png, .jpg, .pdf, and .docx.

DeliverableTemplateList

{
  "items": [
    {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "name": "My Template",
      "detailedEvidenceTypes": {
        "file": {
          "visible": true,
          "required": true
        },
        "url": {
          "visible": true,
          "required": true
        },
        "esign": {
          "visible": true,
          "required": true
        },
        "notes": {
          "visible": true,
          "required": true
        },
        "attestation": {
          "visible": true,
          "required": true
        }
      },
      "esignTemplateExternalID": "ext123",
      "dueDateType": "calculate",
      "dueDateIntervalType": "years",
      "dueDateInterval": 1,
      "dueDateTrigger": "invoice_paid",
      "recurring": true,
      "recurringIntervalType": "years",
      "recurringInterval": 1,
      "recurringTrigger": "last_completed_deliverable",
      "maxRecurrence": 2,
      "allowedFileTypes": [
        ".png",
        ".jpg",
        ".pdf",
        ".docx"
      ]
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Properties

Name Type Required Restrictions Description
items [DeliverableTemplate] false none The list of items for the current page
page integer false none The current page number in the paginated result set.
perPage integer false none The number of items returned per page.
totalItems integer false none The total number of items available.
totalPages integer false none The total number of pages available.

Deliverable

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "advisorID": 1,
  "clientID": 2,
  "engagementID": 3,
  "status": "open",
  "templateName": "My Template",
  "triggerDate": 1551201268,
  "dueDate": 1551201268,
  "attestation": false,
  "notes": "I have uploaded the agreement to long-term storage.",
  "urls": [],
  "fileNames": [],
  "allowedFileTypes": [],
  "intervalType": "years",
  "interval": 1,
  "trigger": "invoice_paid",
  "advisor": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "verified": true,
    "roleTitle": "Advisor",
    "completedOnboarding": true,
    "officeID": 1,
    "metadata": {
      "Phone": "888-888-8888"
    }
  },
  "client": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "invoiceDisplayName": "",
    "advisorID": 1,
    "verified": false,
    "wealthboxURL": "",
    "metadata": {
      "Phone": "888-888-8888"
    },
    "advisor": {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "email": "example@advicepay.com",
      "externalID": "abc123",
      "firstName": "first",
      "lastName": "last",
      "verified": true,
      "roleTitle": "Advisor",
      "completedOnboarding": true,
      "officeID": 1,
      "metadata": {
        "Phone": "888-888-8888"
      }
    }
  }
}

Properties

Name Type Required Restrictions Description
id number false none This is the deliverable’s unique identifier, and should be stored to do any future queries for data belonging to that deliverable.
createdAt number false none This is the Unix timestamp for when the deliverable was created.
updatedAt number false none This is the Unix timestamp for when the deliverable was updated.
deletedAt number false none This is the Unix timestamp for when the deliverable was deleted.
advisorID number false none This is the unique identifier of the advisor that the deliverable was assigned to.
clientID number false none This is the unique identifier of the client that the deliverable is associated with.
engagementID number false none This is the unique identifier of the engagement that the deliverable belongs to.
status string false none This is the status of the deliverable. Possible values:
open (The deliverable is open, awaiting the advisor’s submission)
complete (The deliverable has been completed)
upcoming (The deliverable will be available for the advisor to submit in the future)
past_due (The deliverable is overdue)
templateName string false none The name of the template used to create the deliverable.
triggerDate number false none This is the Unix timestamp for when the deliverable was triggered.
dueDate number false none This is the Unix timestamp for when the deliverable is due.
attestation boolean false none A boolean indicating whether the advisor attests to “providing the agreed upon services to the client and the included evidence is accurate”.
notes string false none Notes included as evidence if allowed by the template.
urls [string] false none A list of URLs included as evidence if allowed by the template.
fileNames [string] false none A list of file names included as evidence if allowed by the template.
allowedFileTypes [string] false none The only file types that can be submitted on a deliverable. Valid file types are .png, .jpg, .pdf, .docx.
intervalType string false none The interval type specified in the template. Valid values are days, weeks, months, and years.
interval number false none The interval specified in the template.
trigger string false none The trigger used to calculate when the deliverable is due. Possible values:
invoice_paid (The due date is calculated based on when the associated invoice was paid)
agreement_signed (The due date is calculated based on when the associated agreement was signed)
advisor Advisor false none none
client Client false none none

DeliverableList

{
  "items": [
    {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "advisorID": 1,
      "clientID": 2,
      "engagementID": 3,
      "status": "open",
      "templateName": "My Template",
      "triggerDate": 1551201268,
      "dueDate": 1551201268,
      "attestation": false,
      "notes": "I have uploaded the agreement to long-term storage.",
      "urls": [],
      "fileNames": [],
      "allowedFileTypes": [],
      "intervalType": "years",
      "interval": 1,
      "trigger": "invoice_paid",
      "advisor": {
        "id": 1,
        "createdAt": 1551201267,
        "updatedAt": 1551201267,
        "deletedAt": 0,
        "email": "example@advicepay.com",
        "externalID": "abc123",
        "firstName": "first",
        "lastName": "last",
        "verified": true,
        "roleTitle": "Advisor",
        "completedOnboarding": true,
        "officeID": 1,
        "metadata": {
          "Phone": "888-888-8888"
        }
      },
      "client": {
        "id": 1,
        "createdAt": 1551201267,
        "updatedAt": 1551201267,
        "deletedAt": 0,
        "email": "example@advicepay.com",
        "externalID": "abc123",
        "firstName": "first",
        "lastName": "last",
        "invoiceDisplayName": "",
        "advisorID": 1,
        "verified": false,
        "wealthboxURL": "",
        "metadata": {
          "Phone": "888-888-8888"
        },
        "advisor": {
          "id": 1,
          "createdAt": 1551201267,
          "updatedAt": 1551201267,
          "deletedAt": 0,
          "email": "example@advicepay.com",
          "externalID": "abc123",
          "firstName": "first",
          "lastName": "last",
          "verified": true,
          "roleTitle": "Advisor",
          "completedOnboarding": true,
          "officeID": 1,
          "metadata": {
            "Phone": "888-888-8888"
          }
        }
      }
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Properties

Name Type Required Restrictions Description
items [Deliverable] false none The list of items for the current page
page integer false none The current page number in the paginated result set.
perPage integer false none The number of items returned per page.
totalItems integer false none The total number of items available.
totalPages integer false none The total number of pages available.

AdvancedSplitRepCode

{
  "advisorID": 108,
  "advisorExternalID": "abc123",
  "firstName": "Bob",
  "lastName": "Smith",
  "splitPercent": 100,
  "metadata": [
    {
      "My custom attribute 1": "My custom attribute 1 value"
    },
    {
      "My custom attribute 2": "My custom attribute 2 value"
    }
  ]
}

Properties

Name Type Required Restrictions Description
advisorID number false none This is the ID of the advisor associated with the advanced split rep code.
advisorExternalID string false none This is used to specify an identifier from your system in the AdvicePay database.
firstName string false none The advisor’s first name.
lastName string false none The advisor’s last name.
splitPercent number false none The percentage of the commission to be paid to the advisor.
metadata object false none Any additonal advisor attributes selected to be displayed under advanced repcode settings.

ServiceDescription

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "invoiceID": 1,
  "title": "Monthly FP",
  "text": "Monthly financial planning services"
}

Properties

Name Type Required Restrictions Description
id number false none This is the service description’s unique identifier.
createdAt number false none This is the Unix timestamp for when the service description was created.
updatedAt number false none This is the Unix timestamp for when the service description was updated.
deletedAt number false none This is the Unix timestamp for when the service description was deleted.
invoiceID number false none This is the ID of the invoice associated with the service description.
title string false none This is the short name to be displayed on the AdvicePay UI.
text string false none This is the text to be displayed on the invoice.

Invoice

{
  "id": 1,
  "createdAt": 1,
  "updatedAt": 1,
  "deletedAt": 0,
  "clientID": 2,
  "advisorID": 1,
  "engagementID": 1,
  "subscriptionID": 1,
  "amount": 10000,
  "description": "My description",
  "invoiceDate": 1551201267,
  "dueDate": 1551201267,
  "failedAt": 1551201267,
  "frequency": "Monthly recurring",
  "number": 1001,
  "paidDate": 1551201267,
  "acceptedPaymentMethods": [
    "ach",
    "ccd"
  ],
  "refundAmount": 0,
  "refundDate": 1551201267,
  "status": "paid",
  "splitRepCode": "string",
  "advancedSplitRepCodes": [
    {
      "advisorExternalID": "extIDa",
      "advisorID": 1,
      "firstName": "First",
      "lastName": "Last",
      "splitPercent": 50
    },
    {
      "advisorExternalID": "extIDb",
      "advisorID": 2,
      "firstName": "Second",
      "lastName": "Advisor",
      "splitPercent": 50
    }
  ],
  "advisor": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "verified": true,
    "roleTitle": "Advisor",
    "completedOnboarding": true,
    "officeID": 1,
    "metadata": {
      "Phone": "888-888-8888"
    }
  },
  "client": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "invoiceDisplayName": "",
    "advisorID": 1,
    "verified": false,
    "wealthboxURL": "",
    "metadata": {
      "Phone": "888-888-8888"
    },
    "advisor": {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "email": "example@advicepay.com",
      "externalID": "abc123",
      "firstName": "first",
      "lastName": "last",
      "verified": true,
      "roleTitle": "Advisor",
      "completedOnboarding": true,
      "officeID": 1,
      "metadata": {
        "Phone": "888-888-8888"
      }
    }
  },
  "serviceDescriptions": [
    "My description",
    "My other description"
  ],
  "payURL": "https://app.advicepay.com/..."
}

Properties

Name Type Required Restrictions Description
id number false none This is the invoice’s unique identifier.
createdAt number false none This is the Unix timestamp for when the invoice was created in AdvicePay.
updatedAt number false none This is the Unix timestamp for when the invoice was updated.
deletedAt number false none This is the Unix timestamp for when the invoice was deleted.
clientID number false none This is the ID of the client that the invoice belongs to.
advisorID number false none This is the ID of the advisor that the invoice belongs to.
engagementID number false none This is the ID of the engagement that the invoice belongs to.
subscriptionID number false none This is the ID of the subscription that the invoice belongs to for recurring payments.
amount number false none This is the amount of the invoice in cents.
description string false none This is the first description in the list of descriptions on the invoice that the advisor provided. Deprecated. Please see the serviceDescriptions attribute.
invoiceDate number false none This is the date in Unix time that the invoice was sent to the client (set to 0 for upcoming invoices).
dueDate number false none This is the due date in Unix time for the invoice set by the advisor.
failedAt number false none This is the date in Unix time when the charge failed (set to 0 if not failed).
frequency string false none This is the frequency of the invoice. It will be one of Single Payment, Monthly recurring, Quarterly recurring, Semi-Annual recurring, or Annual recurring.
number number false none This is the internal invoice number. Each advisor’s invoice count starts at #1001
paidDate number false none This is the date in Unix time that payment was made.
acceptedPaymentMethods [string] false none These are the accepted payment method types. These can be any combination of ach, ccd, check, or left empty to indicate payment outside of AdvicePay.
refundAmount number false none This is the refund amount in cents if a refund has occurred on the invoice.
refundDate number false none This is the refund date in Unix time if a refund has occurred on the invoice.
status string false none This is the status of the invoice. Possible values:
unpaid (no action has been taken)
paid (invoice has been paid and funds have been transferred)
pending_payment (user has submitted payment and money is transferring to bank account)
pending_processing (user has submitted payment but subscription has not kicked off yet)
canceled (invoice was canceled)
refund_failed (refund was attempted, but failed)
pending_approval (invoice is awaiting approval)
approval_rejected (invoice was submitted for approval, but the approver rejected)
splitRepCode string false none This is the split/rep code for the invoice that the advisor provided. This will be populated if the firm setting for split rep codes is set to Standard.
advancedSplitRepCodes [AdvancedSplitRepCode] false none The list of advanced split rep codes. This will be populated if the firm setting for split rep codes is set to Advanced.
advisor Advisor false none The advisor associated with this invoice.
client Client false none The client associated with this invoice.
serviceDescriptions [ServiceDescription] false none The service descriptions associated with this invoice.
payURL string false none The URL where the invoice can be paid.

Subscription

{
  "id": 1,
  "createdAt": 1603399833,
  "updatedAt": 1603399833,
  "deletedAt": 0,
  "clientID": 2,
  "advisorID": 1,
  "engagementID": 1,
  "amount": 10000,
  "billingPeriods": 12,
  "billDate": 1603951200,
  "dueDate": 1603951200,
  "frequency": "Monthly recurring",
  "resumeDate": 0,
  "status": "inactive",
  "advisor": {},
  "client": {}
}

Properties

Name Type Required Restrictions Description
id number false none This is the subscription’s unique identifier.
createdAt number false none This is the Unix timestamp for when the subscription was created in AdvicePay.
updatedAt number false none This is the Unix timestamp for when the subscription was updated.
deletedAt number false none This is the Unix timestamp for when the subscription was deleted.
clientID number false none This is the ID of the client that the subscription belongs to.
advisorID number false none This is the ID of the advisor that the subscription belongs to.
engagementID number false none This is the ID of the engagement that the subscription belongs to.
amount number false none This is the amount of the subscription in cents.
billingPeriods number false none This is the number of billing periods the subscription will bill.
billDate number false none This is the next date this subscription will be billed.
dueDate number false none This is the due date in Unix time for the subscription set by the advisor.
frequency string false none This is the frequency of the subscription. It will be one of Single Payment, Monthly recurring, Quarterly recurring, Semi-Annual recurring, or Annual recurring.
resumeDate number false none This is the date billing will resume if it has been paused.
status string false none This is the status of the subscription. Possible values:
inactive (no action has been taken)
canceled (subscription has been canceled)
active (subscription has been activated)
deleted_by_stripe (similar to inactive but activation was attempted and failed)
paused (subscription was paused)
completed (subscription has completed all billing periods)
pending_approval (subscription is awaiting approval)
approval_rejected (subscription was submitted for approval, but the approver rejected)
advisor object false none The advisor on the subscription.
client object false none The client on the subscription.

Engagement

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "advisorID": 1,
  "clientID": 2,
  "externalID": "xyz123",
  "name": "Ongoing engagement",
  "totalEngagementFee": 2000,
  "advisor": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "verified": true,
    "roleTitle": "Advisor",
    "completedOnboarding": true,
    "officeID": 1,
    "metadata": {
      "Phone": "888-888-8888"
    }
  },
  "client": {
    "id": 1,
    "createdAt": 1551201267,
    "updatedAt": 1551201267,
    "deletedAt": 0,
    "email": "example@advicepay.com",
    "externalID": "abc123",
    "firstName": "first",
    "lastName": "last",
    "invoiceDisplayName": "",
    "advisorID": 1,
    "verified": false,
    "wealthboxURL": "",
    "metadata": {
      "Phone": "888-888-8888"
    },
    "advisor": {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "email": "example@advicepay.com",
      "externalID": "abc123",
      "firstName": "first",
      "lastName": "last",
      "verified": true,
      "roleTitle": "Advisor",
      "completedOnboarding": true,
      "officeID": 1,
      "metadata": {
        "Phone": "888-888-8888"
      }
    }
  },
  "agreements": [
    {}
  ],
  "deliverables": [
    {}
  ],
  "invoices": [
    {}
  ],
  "subscriptions": [
    {}
  ]
}

Properties

Name Type Required Restrictions Description
id number false none This is the engagement’s unique identifier, and should be stored to do any future queries for data belonging to that engagement.
createdAt number false none This is the Unix timestamp for when the engagement was created.
updatedAt number false none This is the Unix timestamp for when the engagement was updated.
deletedAt number false none This is the Unix timestamp for when the engagement was deleted.
advisorID number false none This is the unique identifier of the advisor that the engagement was assigned to.
clientID number false none This is the unique identifier of the client that the engagement is associated with.
externalID string false none This is the external identifier for the engagement.
name string false none This is the name of the engagement.
totalEngagementFee number false none This is the total engagement fee (in cents) that is specified by an advisor when the chosen engagement workflow requires it.
advisor Advisor false none The advisor on the engagement.
client Client false none The client on the engagement.
agreements [Agreement] false none Agreements associated with the engagement (only visible in details view).
deliverables [Deliverable] false none Deliverables associated with the engagement (only visible in details view).
invoices [Invoice] false none Invoices associated with the engagement (only visible in details view).
subscriptions [Subscription] false none Subscriptions associated with the engagement (only visible in details view).

EngagementList

{
  "items": [
    {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "advisorID": 1,
      "clientID": 2,
      "externalID": "xyz123",
      "name": "Ongoing engagement",
      "totalEngagementFee": 2000,
      "advisor": {
        "id": 1,
        "createdAt": 1551201267,
        "updatedAt": 1551201267,
        "deletedAt": 0,
        "email": "example@advicepay.com",
        "externalID": "abc123",
        "firstName": "first",
        "lastName": "last",
        "verified": true,
        "roleTitle": "Advisor",
        "completedOnboarding": true,
        "officeID": 1,
        "metadata": {
          "Phone": "888-888-8888"
        }
      },
      "client": {
        "id": 1,
        "createdAt": 1551201267,
        "updatedAt": 1551201267,
        "deletedAt": 0,
        "email": "example@advicepay.com",
        "externalID": "abc123",
        "firstName": "first",
        "lastName": "last",
        "invoiceDisplayName": "",
        "advisorID": 1,
        "verified": false,
        "wealthboxURL": "",
        "metadata": {
          "Phone": "888-888-8888"
        },
        "advisor": {
          "id": 1,
          "createdAt": 1551201267,
          "updatedAt": 1551201267,
          "deletedAt": 0,
          "email": "example@advicepay.com",
          "externalID": "abc123",
          "firstName": "first",
          "lastName": "last",
          "verified": true,
          "roleTitle": "Advisor",
          "completedOnboarding": true,
          "officeID": 1,
          "metadata": {
            "Phone": "888-888-8888"
          }
        }
      },
      "agreements": [
        {}
      ],
      "deliverables": [
        {}
      ],
      "invoices": [
        {}
      ],
      "subscriptions": [
        {}
      ]
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Properties

Name Type Required Restrictions Description
items [Engagement] false none The list of items for the current page
page integer false none The current page number in the paginated result set.
perPage integer false none The number of items returned per page.
totalItems integer false none The total number of items available.
totalPages integer false none The total number of pages available.

EngagementRevenue

{
  "engagementID": 1,
  "projectedRevenue": 1100,
  "totalEngagementFee": 2000,
  "totalRevenue": 100
}

Properties

Name Type Required Restrictions Description
engagementID number false none This is the engagement’s unique identifier.
projectedRevenue number false none This is the revenue (in cents) that is projected to be collected in the future for the engagement.
totalEngagementFee number false none This is the total engagement fee (in cents) that is specified by an advisor when the chosen engagement workflow requires it.
totalRevenue number false none This is the total revenue (in cents) that has already been collected for the engagement.

EngagementSummary

{
  "id": 1,
  "createdAt": 1699922316,
  "updatedAt": 1701729256,
  "deletedAt": 0,
  "advisorEmail": "example1@advicepay.com",
  "advisorExternalID": "Your_Advisor_External_ID",
  "advisorID": 1,
  "advisorName": "Bob Smith",
  "agreementIDs": [
    123,
    456
  ],
  "clientEmail": "example2@advicepay.com",
  "clientExternalID": "Your_Client_External_ID",
  "clientID": 2,
  "clientMetadata": {
    "My Dropdown": "Option 1"
  },
  "clientName": "Jim Jones",
  "deliverableIDs": [
    1
  ],
  "externalID": "YOUR_ENGAGEMENT_EXTERNAL_ID",
  "invoiceIDs": [
    1,
    2
  ],
  "name": "Standard Engagement",
  "officeID": 1,
  "primaryAgreementCreatedAt": 1699922316,
  "primaryAgreementID": 1,
  "primaryAgreementName": "Financial Planning Agreement",
  "primaryAgreementStatus": "agreement_status_complete",
  "projectedRevenue": 120000,
  "subscriptionIDs": [
    1
  ],
  "totalEngagementFee": 150000,
  "totalRevenue": 40000
}

Properties

Name Type Required Restrictions Description
id number false none This is the engagement’s unique identifier.
createdAt number false none This is the Unix timestamp for when the engagement was created.
updatedAt number false none This is the Unix timestamp for when the engagement or any of the resources it contains were updated.
deletedAt number false none This is the Unix timestamp for when the engagement was deleted.
advisorEmail string false none This is the advisor’s email address.7
advisorExternalID string false none This is the external ID of the advisor.
advisorID number false none This is the AdvicePay ID of the advisor.
advisorName string false none This is the full name of the advisor.
agreementIDs [number] false none This is the list of IDs for all agreements on the engagement.
clientEmail string false none This is the client’s email address.
clientExternalID string false none This is the external ID of the client.
clientID number false none This is the AdvicePay ID of the client.
clientMetadata object false none Additional information added to the client via a custom attribute will show here.
clientName string false none This is the full name of the client.
deliverableIDs [number] false none This is the list of IDs for all deliverables on the engagement.
externalID string false none This is the external identifier for the engagement.
invoiceIDs [number] false none This is the list of IDs of the invoices on the engagement.
name string false none This is the name of the engagement.
officeID number false none This is the ID of the engagement’s office.
primaryAgreementCreatedAt number false none This is the Unix timestamp for when the primary agreement was created.
primaryAgreementID number false none This is the ID of the primary agreement on the engagement.
primaryAgreementName string false none This is the name of the template used to create the primary agreement.
primaryAgreementStatus string false none This is the status of the primary agreement. It will be one of the following:
agreement_status_created (no action has been taken)
agreement_status_opened (a signer has opened the document)
agreement_status_complete (all signers have signed the document)
agreement_status_voided (the signature request has been canceled)
agreement_status_draft (the signature request needs to be completed before sending)
projectedRevenue number false none This is the revenue (in cents) that is projected to be collected in the future for the engagement.
subscriptionIDs [number] false none This is the list of IDs of the subscriptions on the engagement.
totalEngagementFee number false none This is the total engagement fee (in cents) that is specified by an advisor when the chosen engagement workflow requires it.
totalRevenue number false none This is the total revenue (in cents) that has already been collected for the engagement.

EngagementSummaryList

{
  "items": [
    {
      "id": 1,
      "createdAt": 1699922316,
      "updatedAt": 1701729256,
      "deletedAt": 0,
      "advisorEmail": "example1@advicepay.com",
      "advisorExternalID": "Your_Advisor_External_ID",
      "advisorID": 1,
      "advisorName": "Bob Smith",
      "agreementIDs": [
        123,
        456
      ],
      "clientEmail": "example2@advicepay.com",
      "clientExternalID": "Your_Client_External_ID",
      "clientID": 2,
      "clientMetadata": {
        "My Dropdown": "Option 1"
      },
      "clientName": "Jim Jones",
      "deliverableIDs": [
        1
      ],
      "externalID": "YOUR_ENGAGEMENT_EXTERNAL_ID",
      "invoiceIDs": [
        1,
        2
      ],
      "name": "Standard Engagement",
      "officeID": 1,
      "primaryAgreementCreatedAt": 1699922316,
      "primaryAgreementID": 1,
      "primaryAgreementName": "Financial Planning Agreement",
      "primaryAgreementStatus": "agreement_status_complete",
      "projectedRevenue": 120000,
      "subscriptionIDs": [
        1
      ],
      "totalEngagementFee": 150000,
      "totalRevenue": 40000
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Properties

Name Type Required Restrictions Description
items [EngagementSummary] false none The list of items for the current page
page integer false none The current page number in the paginated result set.
perPage integer false none The number of items returned per page.
totalItems integer false none The total number of items available.
totalPages integer false none The total number of pages available.

InvoiceList

{
  "items": [
    {
      "id": 1,
      "createdAt": 1,
      "updatedAt": 1,
      "deletedAt": 0,
      "clientID": 2,
      "advisorID": 1,
      "engagementID": 1,
      "subscriptionID": 1,
      "amount": 10000,
      "description": "My description",
      "invoiceDate": 1551201267,
      "dueDate": 1551201267,
      "failedAt": 1551201267,
      "frequency": "Monthly recurring",
      "number": 1001,
      "paidDate": 1551201267,
      "acceptedPaymentMethods": [
        "ach",
        "ccd"
      ],
      "refundAmount": 0,
      "refundDate": 1551201267,
      "status": "paid",
      "splitRepCode": "string",
      "advancedSplitRepCodes": [
        {
          "advisorExternalID": "extIDa",
          "advisorID": 1,
          "firstName": "First",
          "lastName": "Last",
          "splitPercent": 50
        },
        {
          "advisorExternalID": "extIDb",
          "advisorID": 2,
          "firstName": "Second",
          "lastName": "Advisor",
          "splitPercent": 50
        }
      ],
      "advisor": {
        "id": 1,
        "createdAt": 1551201267,
        "updatedAt": 1551201267,
        "deletedAt": 0,
        "email": "example@advicepay.com",
        "externalID": "abc123",
        "firstName": "first",
        "lastName": "last",
        "verified": true,
        "roleTitle": "Advisor",
        "completedOnboarding": true,
        "officeID": 1,
        "metadata": {
          "Phone": "888-888-8888"
        }
      },
      "client": {
        "id": 1,
        "createdAt": 1551201267,
        "updatedAt": 1551201267,
        "deletedAt": 0,
        "email": "example@advicepay.com",
        "externalID": "abc123",
        "firstName": "first",
        "lastName": "last",
        "invoiceDisplayName": "",
        "advisorID": 1,
        "verified": false,
        "wealthboxURL": "",
        "metadata": {
          "Phone": "888-888-8888"
        },
        "advisor": {
          "id": 1,
          "createdAt": 1551201267,
          "updatedAt": 1551201267,
          "deletedAt": 0,
          "email": "example@advicepay.com",
          "externalID": "abc123",
          "firstName": "first",
          "lastName": "last",
          "verified": true,
          "roleTitle": "Advisor",
          "completedOnboarding": true,
          "officeID": 1,
          "metadata": {
            "Phone": "888-888-8888"
          }
        }
      },
      "serviceDescriptions": [
        "My description",
        "My other description"
      ],
      "payURL": "https://app.advicepay.com/..."
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Properties

Name Type Required Restrictions Description
items [Invoice] false none The list of items for the current page
page integer false none The current page number in the paginated result set.
perPage integer false none The number of items returned per page.
totalItems integer false none The total number of items available.
totalPages integer false none The total number of pages available.

ServiceDescriptionRequest

{
  "title": "Monthly FP",
  "text": "Monthly financial planning services"
}

Properties

Name Type Required Restrictions Description
title string false none This is the short name to be displayed on the AdvicePay UI.
text string false none This is the text to be displayed on the invoice.

Notification

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "advisorID": 1,
  "amount": 100,
  "clientID": 2,
  "invoiceID": 1,
  "subscriptionID": 1,
  "key": "invoice-failed",
  "text": "Invoice #1234 of $1.00 failed"
}

Properties

Name Type Required Restrictions Description
id number false none This is the notification’s unique identifier, and should be stored to do any future queries for data belonging to that notification.
createdAt number false none This is the Unix timestamp for when the notification was created.
updatedAt number false none This is the Unix timestamp for when the notification was updated.
deletedAt number false none This is the Unix timestamp for when the notification was deleted.
advisorID number false none This is the ID of the advisor that the notification belongs to.
amount number false none The amount (in cents) related to the notification (for money transfer notifications).
clientID number false none This is the ID of the client that the notification belongs to.
invoiceID number false none This is the ID of the invoice associated with the notification (for invoice-specific notifications).
subscriptionID number false none This is the ID of the subscription associated with the notification (for subscription-specific notifications).
key string false none This is the key representing the type of the notification.
text string false none This is the text of the notification.

NotificationList

{
  "items": [
    {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "advisorID": 1,
      "amount": 100,
      "clientID": 2,
      "invoiceID": 1,
      "subscriptionID": 1,
      "key": "invoice-failed",
      "text": "Invoice #1234 of $1.00 failed"
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Properties

Name Type Required Restrictions Description
items [Notification] false none The list of items for the current page
page integer false none The current page number in the paginated result set.
perPage integer false none The number of items returned per page.
totalItems integer false none The total number of items available.
totalPages integer false none The total number of pages available.

Office

{
  "id": 1,
  "createdAt": 1551201267,
  "updatedAt": 1551201267,
  "deletedAt": 0,
  "name": "Example Office"
}

Offices are only applicable to Enterprise accounts. Essential and Professional accounts have no concept of multiple Offices.

Properties

Name Type Required Restrictions Description
id number false none This is the office’s unique identifier, and should be stored to do any future queries for data belonging to that office.
createdAt number false none This is the Unix timestamp for when the office was created.
updatedAt number false none This is the Unix timestamp for when the office was updated.
deletedAt number false none This is the Unix timestamp for when the office was deleted.
name string false none The name of the office.

OfficeList

{
  "items": [
    {
      "id": 1,
      "createdAt": 1551201267,
      "updatedAt": 1551201267,
      "deletedAt": 0,
      "name": "Example Office"
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Properties

Name Type Required Restrictions Description
items [Office] false none The list of items for the current page
page integer false none The current page number in the paginated result set.
perPage integer false none The number of items returned per page.
totalItems integer false none The total number of items available.
totalPages integer false none The total number of pages available.

SubscriptionList

{
  "items": [
    {
      "id": 1,
      "createdAt": 1603399833,
      "updatedAt": 1603399833,
      "deletedAt": 0,
      "clientID": 2,
      "advisorID": 1,
      "engagementID": 1,
      "amount": 10000,
      "billingPeriods": 12,
      "billDate": 1603951200,
      "dueDate": 1603951200,
      "frequency": "Monthly recurring",
      "resumeDate": 0,
      "status": "inactive",
      "advisor": {},
      "client": {}
    }
  ],
  "page": 1,
  "perPage": 10,
  "totalItems": 100,
  "totalPages": 10
}

Properties

Name Type Required Restrictions Description
items [Subscription] false none The list of items for the current page
page integer false none The current page number in the paginated result set.
perPage integer false none The number of items returned per page.
totalItems integer false none The total number of items available.
totalPages integer false none The total number of pages available.

OneTimePaymentRequest

{
  "amount": 10000,
  "dueDate": 1701729256,
  "serviceDescriptions": [
    {
      "title": "Monthly FP",
      "text": "Monthly financial planning services"
    }
  ]
}

Properties

Name Type Required Restrictions Description
amount number true none Number in cents, value must be greater than 50.
dueDate number true none This is the due date in Unix time. Must be a date in the future.
serviceDescriptions [ServiceDescriptionRequest] true none A list of service descriptions that will be displayed on the invoices.

Transaction

{
  "id": "1FK4P7HVyHl4ufXt73dCbyme",
  "transferID": "Kok1FeZg9HVyHl4ufXtHl6xBfOS",
  "transactionType": "charge",
  "paymentType": "CC",
  "grossAmount": 1400,
  "feeAP": 79,
  "feeOverride": 0,
  "total": 1321,
  "paidDate": 1551201267,
  "paymentMessage": "Payment successfully processed.",
  "clientName": "First Last",
  "clientExternalID": "extIDc",
  "advisorName": "First Last",
  "advisorEmail": "example@advicepay.com",
  "advisorExternalID": "extIDa",
  "advisorID": 1,
  "agreementID": 1,
  "engagementExternalID": "extEng",
  "engagementID": 1,
  "invoiceID": 1,
  "invoiceNum": 1001,
  "invoiceType": "Single Payment",
  "recurringStartDate": 0,
  "recurringEndDate": 0,
  "invoiceDescription": "First Description",
  "serviceDescriptions": [
    "First description",
    "Second description"
  ],
  "splitRepCode": "string",
  "advancedSplitRepCodes": [
    {
      "advisorExternalID": "extIDa",
      "advisorID": 1,
      "firstName": "First",
      "lastName": "Last",
      "splitPercent": 50
    },
    {
      "advisorExternalID": "extIDb",
      "advisorID": 2,
      "firstName": "Second",
      "lastName": "Advisor",
      "splitPercent": 50
    }
  ]
}

Properties

Name Type Required Restrictions Description
id string false none This is the transaction’s unique identifier.
transferID string false none This is the ID of the transfer that the transaction belongs to.
transactionType string false none This is the type of the transaction. Typically one of charge, payment, refund, payment_failure_refund, check.
paymentType string false none This is the type of payment used for the transaction. It will be either CC (credit card), ACH (bank account), or CHK (check).
grossAmount number false none This is the amount charged in cents.
feeAP number false none This is the amount of the transaction fee.
feeOverride number false none This is the calculated percentage firm fee amount. Percentage set under enterprise firm settings.
total number false none This is the amount for deposit in cents.
paidDate number false none This is the Unix timestamp for when the charge was paid.
paymentMessage string false none This is the note that was written when the invoice was marked as paid.
clientName string false none This is the first and last name of the client.
clientExternalID string false none This is the optional ID field on the client object.
advisorName string false none This is the first and last name of the advisor on the invoice.
advisorEmail string false none This is the email of the advisor on the invoice.
advisorExternalID string false none This is the optional ID field on the advisor object.
advisorID number false none This is AdvicePay’s unique internal advisor ID.
agreementID number false none This is AdvicePay’s unique internal agreement ID.
engagementExternalID string false none This is the optional ID field on the engagement object.
engagementID number false none This is AdvicePay’s unique internal engagement ID.
invoiceID number false none This is AdvicePay’s unique internal invoice ID.
invoiceNum number false none This is the invoice number shown on the invoice. Each advisor’s invoice count starts at #1001.
invoiceType string false none This is the type of the invoice. It will be one of Single Payment, Monthly recurring, Quarterly recurring, Semi-Annual recurring, or Annual recurring.
recurringStartDate number false none This is the Unix timestamp for when the recurring payment was started.
recurringEndDate number false none This is the Unix timestamp for when the recurring payment ends.
invoiceDescription string false none This is the first description on the invoice (Deprecated in favor of serviceDescriptions attribute).
serviceDescriptions [string] false none This is the array of descriptions on the invoice.
splitRepCode string false none This is the split/rep code for the invoice that the advisor provided. This will be populated if the firm setting for split rep codes is set to Standard.
advancedSplitRepCodes [AdvancedSplitRepCode] false none The list of advanced split rep codes. This will be populated if the firm setting for split rep coes is set to Advanced.

Transfer

{
  "id": "Kok1FeZg9HVyHl4ufXtHl6xBfOS",
  "status": "paid",
  "grossAmount": 1400,
  "bankDeposit": 1321,
  "arrivalDate": 1551201267,
  "paymentCount": 1,
  "feeOverride": 0,
  "transactions": [
    {
      "id": "1FK4P7HVyHl4ufXt73dCbyme",
      "transferID": "Kok1FeZg9HVyHl4ufXtHl6xBfOS",
      "transactionType": "charge",
      "paymentType": "CC",
      "grossAmount": 1400,
      "feeAP": 79,
      "feeOverride": 0,
      "total": 1321,
      "paidDate": 1551201267,
      "paymentMessage": "Payment successfully processed.",
      "clientName": "First Last",
      "clientExternalID": "extIDc",
      "advisorName": "First Last",
      "advisorEmail": "example@advicepay.com",
      "advisorExternalID": "extIDa",
      "advisorID": 1,
      "agreementID": 1,
      "engagementExternalID": "extEng",
      "engagementID": 1,
      "invoiceID": 1,
      "invoiceNum": 1001,
      "invoiceType": "Single Payment",
      "recurringStartDate": 0,
      "recurringEndDate": 0,
      "invoiceDescription": "First Description",
      "serviceDescriptions": [
        "First description",
        "Second description"
      ],
      "splitRepCode": "string",
      "advancedSplitRepCodes": [
        {
          "advisorExternalID": "extIDa",
          "advisorID": 1,
          "firstName": "First",
          "lastName": "Last",
          "splitPercent": 50
        },
        {
          "advisorExternalID": "extIDb",
          "advisorID": 2,
          "firstName": "Second",
          "lastName": "Advisor",
          "splitPercent": 50
        }
      ]
    }
  ]
}

Properties

Name Type Required Restrictions Description
id string false none This is the transfer’s unique identifier.
status string false none This is the status of the transfer. Possible values:
paid (funds have been successfully transferred)
pending (waiting to be submitted to the bank)
in_transit (submitted to the bank)
failed (transfer was attempted, but failed)
canceled (transfer attempt was canceled)
grossAmount number false none This is the amount of the total transaction charges in cents.
bankDeposit number false none This is the amount for deposit in cents.
arrivalDate number false none This is the Unix timestamp for arrival of deposit to the bank account.
paymentCount number false none This is the number of transactions included in the transfer.
feeOverride number false none This is the calculated percentage firm fee amount. Percentage set under enterprise firm settings.
transactions [Transaction] false none This is the list of transactions included in the transfer.

TransferList

{
  "items": [
    {
      "id": "Kok1FeZg9HVyHl4ufXtHl6xBfOS",
      "status": "paid",
      "grossAmount": 1400,
      "bankDeposit": 1321,
      "arrivalDate": 1551201267,
      "paymentCount": 1,
      "feeOverride": 0,
      "transactions": [
        {
          "id": "1FK4P7HVyHl4ufXt73dCbyme",
          "transferID": "Kok1FeZg9HVyHl4ufXtHl6xBfOS",
          "transactionType": "charge",
          "paymentType": "CC",
          "grossAmount": 1400,
          "feeAP": 79,
          "feeOverride": 0,
          "total": 1321,
          "paidDate": 1551201267,
          "paymentMessage": "Payment successfully processed.",
          "clientName": "First Last",
          "clientExternalID": "extIDc",
          "advisorName": "First Last",
          "advisorEmail": "example@advicepay.com",
          "advisorExternalID": "extIDa",
          "advisorID": 1,
          "agreementID": 1,
          "engagementExternalID": "extEng",
          "engagementID": 1,
          "invoiceID": 1,
          "invoiceNum": 1001,
          "invoiceType": "Single Payment",
          "recurringStartDate": 0,
          "recurringEndDate": 0,
          "invoiceDescription": "First Description",
          "serviceDescriptions": [
            "First description",
            "Second description"
          ],
          "splitRepCode": "string",
          "advancedSplitRepCodes": [
            {
              "advisorExternalID": "extIDa",
              "advisorID": 1,
              "firstName": "First",
              "lastName": "Last",
              "splitPercent": 50
            },
            {
              "advisorExternalID": "extIDb",
              "advisorID": 2,
              "firstName": "Second",
              "lastName": "Advisor",
              "splitPercent": 50
            }
          ]
        }
      ]
    }
  ],
  "perPage": 10,
  "hasMore": false
}

Properties

Name Type Required Restrictions Description
items [Transfer] false none The transfers.
perPage integer false none The number of items returned per page.
hasMore boolean false none An indication of whether there are more pages of transfers available.