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
- oAuth2 authentication. AdvicePay uses OAuth 2.0 for all public API access. Tokens are expected to be included in all API requests to the server in a header that looks like the following:
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
- Users are redirected to AdvicePay by your site and prompted to authorize your app
- Users are redirected back to your site by AdvicePay
- Your site requests an access token and refresh token using an authorization code
- Your site refreshes the access token and the refresh token using a refresh token
- 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:
- Your site requests an access token using the client ID and client secret.
- Your site makes API calls using the access token.
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). |
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. |
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. |
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. |
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. |
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. |
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
.
- If the
expect
query parameter is “json”, the response will contain a Base64-encoded representation of the file as part of a JSON object.
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. |
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. |
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. |
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:
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 link to a client:
/clients/<ID>
- Deep link to the payment request flow:
/payments/create
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. |
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. |
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. |
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. |
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. |