Custodial Accounts
All requests require clientID and developerAPIKey parameters for authentication.
Base URL: https://api-sandboxdash.norcapsecurities.com
Endpoints
POST /v3/createCustodyAccountRequest
This method is used to request a custodial account. This is the first step to opening a custodial account through North Capital Private Securities. The Custody Agreement Attestation (createCustodyAgreementAttestation) must be affirmatively recorded before the request can be made.
Parameters
| Parameter | Type | Required | Description |
accountId | string | Yes | Account ID that is generated by the API once an account is created (createAccount) |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/createCustodyAccountRequest
-d clientID=someclientid
-d developerAPIKey=somedeveloperkey
-d accountId=A12345
Response
| Field | Type | Description |
custodialAccountDetails | array | Array of custodial account request records (one element) |
| Field | Type | Description |
accountId | string | Account ID generated by the API with createAccount |
custAccStatus | string | Request status: Pending, Need More Info, Approved, Rejected, New Info Added |
accountStatus | string | Status of the custody account: Pending, Open, Closed |
custAccRequestID | string | Custodial Account Request Id |
createdDate | string | Date and timestamp of the request |
approvalStatus | string | Approval status of the underlying TAPI account (from createAccount) |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"custodialAccountDetails": [
{
"accountId": "A98780788",
"custAccStatus": "Pending",
"accountStatus": "Pending",
"custAccRequestID": "yNHHDX2",
"createdDate": "2024-11-22 16:22:10",
"approvalStatus": "Pending"
}
]
}
POST /v3/createCustodyAccountSupplement
This method is used to request a custodial account. This is the first step to opening a custodial account through North Capital Private Securities. This is specifically for IRA accounts.
Parameters
| Parameter | Type | Required | Description |
accountId | string | Yes | Account ID that is generated by the API once an account is created (createAccount) |
appointmentOfInvestmentManager | string | No | 1 - I/We wish to appoint an investment manager. Complete Part 1A 2 - No appointment at this time |
proxyVotingPreferences | string | No | 1 - Receive all proxy materials 2 - Send all proxy marterials to an investment manager 3 - Do not send proxy material |
otherServices | string | No | Please provide the details of the other services required. |
methodOfContributionOrFunding | string | No | 1 - Transfer Direct movement of assets from an IRA into this IRA 2 - Regular Contribution Includes catch-up contributions. 3 - Roth Conversion A taxable movement from a Traditional or Simple IRA into this Roth IRA. By selecting this transaction, you irrevocably designate this contribution as a conversion. 4 - Rollover Distribution from an IRA or eligible employersponsored retirement plan that is being deposited into this IRA. By selecting this transaction, you irrevocably designate this contribution as a rollover. 5 - SEP Contribution Contribution made under a SEP plan. SEP contributions are reported for the year in which the contribution is made |
methodOfContributionTaxYear | string | No | If "methodOfContributionOrFunding is option 2 - this is required to complete "Contribution for Tax Year 'YYYY'. |
internationalAccountNumber | string | No | If the account is an international account, please include the account number here. |
bankFirmName1 | string | No | Name of the bank/firm where the assets are currently held. |
bankCountry1 | string | No | Country of the bank/firm where the assets are currently held. |
bankAccountName1 | string | No | Name on the account where the assets are currently held. |
bankAccountNumber1 | string | No | Account number of the account where the assets are currently held. |
bankFirmName2 | string | No | Name of the bank/firm where the assets are currently held. |
bankCountry2 | string | No | Country of the bank/firm where the assets are currently held. |
bankAccountName2 | string | No | Name on the account where the assets are currently held. |
bankAccountNumber2 | string | No | Account number of the account where the assets are currently held. |
maritalStatus | string | No | 1 - Not married. 2 - Married If you designate a primary benefiicary other than or in addition to your spouse, spousal consent may be required. |
mailingAddressLine1 | string | Yes | Mailing Address Line 1 |
mailingAddressLine2 | string | No | Mailing Address Line 2 |
mailingCity | string | Yes | Mailing Address City |
mailingState | string | Yes | Mailing Address State |
mailingZipCode | string | Yes | Mailing Address Zip Code |
mailingCountry | string | Yes | Mailing Address Country |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/createCustodyAccountSupplement
-d clientID=someclientid
-d developerAPIKey=someclientid
-d accountId=someaccountid
-d proxyVotingPreferences=proxyVotingPreferences
-d otherServices=otherServices
-d methodOfContributionOrFunding=type
-d methodOfContributionTaxYear=some year
-d internationalAccountNumber=internationalAccountNumber
-d bankFirmName1=bankFirmName1
-d bankCountry1=bankCountry1
-d bankAccountName1=bankAccountName1
-d bankAccountNumber1=bankAccountNumber1
-d bankFirmName2=bankFirmName
-d bankCountry2=bankCountry
-d bankAccountName2=bankAccountName
-d bankAccountNumber2=bankAccountNumber
-d maritalStatus=1
-d mailingAddressLine1=Mailing Address Line 1
-d mailingAddressLine2=Mailing Address Line 2
-d mailingCity=Mailing Address City
-d mailingState=Mailing Address State
-d mailingZipCode=Mailing Address Zip Code
-d mailingCountry=Mailing Address Country
Response
| Field | Type | Description |
accountDetails | object | The stored custodial account supplement record |
| Field | Type | Description |
accountId | string | Account ID that is generated by the API once an account is created (createAccount) |
appointmentOfInvestmentManager | string | 1 or 2 |
proxyVotingPreferences | string | 1, 2, or 3 |
otherServices | string | Details of the other services required. |
methodOfContributionOrFunding | string | 1, 2, 3, 4, or 5, |
methodOfContributionTaxYear | string | YYYY |
internationalAccountNumber | string | International account number |
bankFirmName1 | string | Name of the bank/firm where the assets are currently held. |
bankCountry1 | string | Country of the bank/firm where the assets are currently held. |
bankAccountName1 | string | Account name of the account where the assets are currently held. |
bankAccountNumber1 | string | Account number of the account where the assets are currently held. |
bankFirmName2 | string | Country of the bank/firm where the assets are currently held. |
bankCountry2 | string | Country of the bank/firm where the assets are currently held. |
bankAccountName2 | string | Name of the bank/firm where the assets are currently held. |
bankAccountNumber2 | string | Account number of the account where the assets are currently held. |
maritalStatus | string | 1 - Not married. 2 - Married |
mailingAddressLine1 | string | Mailing address |
mailingAddressLine2 | string | Mailing address |
mailingCity | string | Mailing city |
mailingState | string | Mailing state |
mailingZipCode | string | Mailing zip code |
mailingCountry | string | Mailing country |
Example Response
{
"statusCode": "101",
"statusDesc": "Account added successfully.",
"accountDetails": {
"accountId": "A3091454",
"appointmentOfInvestmentManager": "2",
"proxyVotingPreferences": "2",
"otherServices": "",
"methodOfContributionOrFunding": "4",
"methodOfContributionTaxYear": "",
"internationalAccountNumber": "",
"bankFirmName1": "Bank of America",
"bankCountry1": "US",
"bankAccountName1": "",
"bankAccountNumber1": "123456789",
"bankFirmName2": "",
"bankCountry2": "",
"bankAccountName2": "",
"bankAccountNumber2": "",
"maritalStatus": "1",
"mailingAddressLine1": "",
"mailingAddressLine2": "",
"mailingCity": "",
"mailingState": "",
"mailingZipCode": "",
"mailingCountry": ""
}
}
POST /v3/createCustodyAgreementAttestation
This method is used to record when a party attests to North Capital account terms and conditions.
Parameters
| Parameter | Type | Required | Description |
accountId | string | Yes | Account ID that is generated by the API once an account is created (createAccount). |
isAttested | boolean | Yes | true (accepted) |
documentUrl | string | Yes | URL for attestation document |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/createCustodyAgreementAttestation
-d clientID=someclientid
-d developerAPIKey=somedeveloperkey
-d accountId=A2624258
-d isAttested=true
-d documentUrl=https://example.com
Response
| Field | Type | Description |
attestation | object | attestation details |
| Field | Type | Description |
accountId | string | Account ID that has attested |
isAttested | boolean | 1 = true, the party has attested |
documentUrl | string | URL for attestation |
createdDate | string | Date and timestamp of the attestation |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"attestation": {
"accountId": "A98780730",
"isAttested": "1",
"documentUrl": "https://example.com",
"createdDate": "2024-11-26 17:05:16"
}
}
POST /v3/createCustodyFundDisbursement
This method requests a disbursement (withdrawal) of funds from a custody account. ACH disbursements send funds to the external bank account linked to the TAPI account; wire disbursements send funds to the bank identified by bankId and bankAccountId. The disbursement is created in a pending state.
Parameters
| Parameter | Type | Required | Description |
accountId | string | Yes | Account ID generated from createAccount |
amount | string | Yes | Amount of funds to be transferred |
type | string | Yes | Type options: ach, wire_domestic, wire_international |
bankId | string | No | Required for wire transfers only. |
bankAccountId | string | No | Required for wire transfers only. |
additionalDetails | string | No | Open text field to provide any additional instructions required to successfully send the wire transfer |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/createCustodyFundDisbursement
-d clientID=someclientid
-d developerAPIKey=somedeveloperkey
-d accountId=someaccountid
-d amount=22.23
-d type=wire_domestic
-d bankId=122100024
-d bankAccountId=123456789
Response
| Field | Type | Description |
custodyFundDisbursement | object | The created disbursement request. See fields below. |
Response Fields
| Field | Type | Description |
requestId | string (UUID) | Unique disbursement request identifier. |
accountId | string | TAPI Account ID the disbursement is drawn from. |
amount | string | Disbursement amount, with two decimal places. |
type | string | Transfer type. One of ach, wire_domestic, wire_international. |
bankId | string | null | Destination bank/routing identifier (wire transfers); null for ACH. |
bankAccountId | string | null | Destination bank account identifier (wire transfers); null for ACH. |
additionalDetails | string | null | Additional instructions provided on the request; null when not provided. |
status | string | Disbursement status. One of pending, processing, on_hold, approved, rejected, scheduled, in_review, completed, terminated, failed, reopened. Newly created disbursements start at pending. |
createdDate | string | Date and timestamp the disbursement was created. |
updatedDate | string | Date and timestamp the disbursement was last updated. |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"custodyFundDisbursement": {
"requestId": "a49a68b7-f0ab-45b5-ac07-6ed555259d27",
"accountId": "A3110006",
"amount": "1.20",
"type": "wire_domestic",
"bankId": "122100024",
"bankAccountId": "123456789",
"additionalDetails": null,
"status": "pending",
"createdDate": "2024-12-10 23:29:13",
"updatedDate": "2024-12-10 23:29:13"
}
}
POST /v3/createCustodyFundMove
This method initiates a fund move (deposit) into a custody account by debiting the external bank account linked to the supplied TAPI account. The deposit is created in a Pending state and is submitted to the bank for ACH processing at 6:00 PM Eastern Time each business day. The amount is limited based on the client's risk assessment and per-transaction ACH cap.
Parameters
| Parameter | Type | Required | Description |
accountId | string | Yes | Account ID that is generated by the API once an account is created (createAccount) |
amount | string | Yes | The amount to be debited from the external account. The amount is limited based on client risk assessment and is capped at $100,000.00 |
description | string | No | Description of the fund move |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/createCustodyFundMove
-d developerAPIKey=somedeveloperkey
-d clientID=someclientid
-d accountId=985742
-d amount=10000.50
-d description=Example Transaction
Response
| Field | Type | Description |
custodyTransaction | object | The created fund move transaction. See fields below. |
Response Fields
| Field | Type | Description |
accountId | string | TAPI Account ID the deposit was initiated for. |
bankName | string | null | Name of the external bank, when available. |
amount | string | Amount of the fund move (decimal string). |
accountNumber | string | External bank account number (decoded). Empty string when not exposed. |
routingNumber | string | External bank routing number (decoded). |
accountName | string | Name on the external bank account. |
referenceNumber | string | API-generated reference number identifying this fund move. |
description | string | Description provided on the request. |
approvalStatus | string | Internal approval state. Pending for live transactions; TEST ENTRY when the external account uses a test nickname. |
status | string | Fund move (fundStatus) state. One of Pending, Submitted, Settled, Returned, Voided, Declined. Newly created fund moves start at Pending. |
routingNumberStatus | string | Routing number verification result (e.g. Verified). |
errors | string | Error detail associated with the transaction; empty string when none. |
createdDate | string | Date and timestamp the fund move was created. |
updatedDate | string | Date and timestamp the fund move was last updated. |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"custodyTransaction": {
"accountId": "A3110006",
"bankName": null,
"amount": "7.000000",
"accountNumber": "",
"routingNumber": "011001726",
"accountName": "",
"referenceNumber": "339846456",
"description": "",
"approvalStatus": "Pending",
"status": "Pending",
"routingNumberStatus": "Verified",
"errors": "",
"createdDate": "2024-12-10 22:49:06",
"updatedDate": "2024-12-10 22:49:06"
}
}
POST /v3/createCustodyPartySupplement
This method is used to add additional fields that may be required in order to open a custodial account through North Capital Private Securities.
Parameters
| Parameter | Type | Required | Description |
partyId | string | Yes | Party ID that is generated by the API once a party is created (createParty) |
relationship | string | No | The party's relationship to the account owner. Put "owner" if this is the account owner. |
salutation | string | No | The party's title. Enum: Mr., Mrs., Ms., Dr. Deprecated aliases: 1 (Mr.), 2 (Mrs.), 3 (Ms.), 4 (Dr.). The field is not validated, so any other value is stored as sent. |
countryOfCitizenship | string | No | Party's country of citizenship. |
authorizedSigner | string | No | Is this party the authorized signer for the account? Enum (case-insensitive): Yes, No. Deprecated aliases: 1 (Yes), 2 (No). Any other value stores an empty string. |
controlPerson | string | No | Is this party a control person for the account? Enum (case-insensitive): Yes, No. Deprecated aliases: 1 (Yes), 2 (No). Any other value stores an empty string. |
politicallyExposedPerson | string | No | Is this person considered a politically exposed person? Enum (case-insensitive): Yes, No. Deprecated aliases: 1 (Yes), 2 (No). Any other value stores an empty string. |
politicallyExposedPersonDetails | string | No | If the person selects "Yes" that they are a politically exposed person, then this field is required. Please provide the details of the politically exposed person. |
beneficiaryType | string | No | The beneficiary type, if this party is a beneficiary for the account. Enum: Spouse, Non-Spouse, Trust/Entity. Deprecated aliases: 1 (Spouse), 2 (Non-Spouse), 3 (Trust/Entity). The field is not validated, so any other value is stored as sent. |
beneficiaryPercentage | string | No | If this party is a beneficiary for the account, please provide the percentage. Stored as sent and not validated. |
mailingAddressLine1 | string | No | Mailing Address Line 1 |
mailingAddressLine2 | string | No | Mailing Address Line 2 |
mailingCity | string | No | Mailing Address City |
mailingState | string | No | Mailing Address State |
mailingZipCode | string | No | Mailing Address Zip Code |
mailingCountry | string | No | Mailing Address Country |
publicCompany | string | No | Is this party associated with a public company? Enum (case-insensitive, stored lowercase): Yes, No. Deprecated aliases: 1 (Yes), 2 (No). Any other value stores an empty string. |
companyTicker | string | No | Company Ticker if the party is associated with a public company |
associatedFirm | string | No | If the party is associated with a broker dealer, please indicate the name of the Associated Firm |
createdIpAddress | string | No | IP address recorded against the record |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/createCustodyPartySupplement
-d clientID=someclientid
-d developerAPIKey=somedeveloperKey
-d partyId=somepartyid
-d relationship=owner
-d salutation=Mr
-d countryOfCitizenship=citizenship
-d authorizedSigner=yes
-d controlPerson=yes
-d politicallyExposedPerson=yes
-d politicallyExposedPersonDetails=some details
-d beneficiaryType=Spouse
-d beneficiaryPercentage=100
-d mailingAddressLine1=address1
-d mailingAddressLine2=address2
-d mailingCity=city
-d mailingState=state
-d mailingZipCode=54321
-d mailingCountry=US
-d publicCompany=yes
-d companyTicker=test
-d associatedFirm=test
Response
| Field | Type | Description |
party details | object | The stored party details |
| Field | Type | Description |
partyId | string | Party ID that is generated by the API once a party is created (createParty) |
relationship | string | The party's relationship to the account owner, as sent |
salutation | string | Mr., Mrs., Ms., Dr., or the value sent |
countryOfCitizenship | string | Party's country of citizenship. |
authorizedSigner | string | Yes, No, or an empty string |
controlPerson | string | Yes, No, or an empty string |
politicallyExposedPerson | string | Yes, No, or an empty string |
politicallyExposedPersonDetails | string | Details of the politically exposed person |
beneficiaryType | string | Spouse, Non-Spouse, Trust/Entity, or the value sent |
beneficiaryPercentage | string | The percentage as sent |
mailingAddressLine1 | string | Mailing Address Line |
mailingAddressLine2 | string | Mailing Address Line |
mailingCity | string | Mailing Address City |
mailingState | string | Mailing Address State |
mailingZipCode | string | Mailing Address Zip |
mailingCountry | string | Mailing Address Country |
Example Response
{
"statusCode": "101",
"statusDesc": "Party added successfully.",
"party details": {
"partyId": "P2726935",
"relationship": "owner",
"salutation": "Mr",
"countryOfCitizenship": "citizenship",
"authorizedSigner": "Yes",
"controlPerson": "Yes",
"politicallyExposedPerson": "Yes",
"politicallyExposedPersonDetails": "some details",
"beneficiaryType": "Spouse",
"beneficiaryPercentage": "100",
"mailingAddressLine1": "address1",
"mailingAddressLine2": "address2",
"mailingCity": "city",
"mailingState": "state",
"mailingZipCode": "54321",
"mailingCountry": "US"
}
}
A party can only have one supplement record. Calling this a second time for the same party returns statusCode 200 with Error(s) set to This partyId already added. — use updateCustodyPartySupplement to change an existing record.
GET /v3/custody/accounts/{id}/positions
Fetch the security positions held in a single custody account. The endpoint resolves the supplied TAPI account ID ({id}) to its underlying brokerage (custody) account and returns one aggregated row per security, where units is the net of all credit and debit security transactions for that security.
Permissions
This method requires the scope custody_account.read to be granted to the calling API key. The scope can be assigned by system admins through the API or Transact Portal.
Authorization
All requests require clientID and developerAPIKey parameters for authentication. The account must belong to one of the API keys owned by the authenticated client.
Path Parameters
| Parameter | Type | Required | Description |
id | string | Yes | TAPI Account ID (e.g. A12345) generated by createAccount. Resolved internally to the linked brokerage/custody account. |
Response Fields
The positions array contains one entry per security held in the account.
| Field | Type | Description |
id | string | Security identifier (CUSIP or symbol) of the held security. |
date | string | Date (YYYY-MM-DD) of the most recent security transaction for this security in the account. |
units | string | Net number of units held: the sum of credit transaction units minus debit transaction units. |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"positions": [
{
"id": "02587DM96",
"date": "2019-03-20",
"units": "27"
},
{
"id": "40434YGR2",
"date": "2019-03-21",
"units": "1"
},
{
"id": "38148JA92",
"date": "2019-03-22",
"units": "1"
},
{
"id": "DELL12",
"date": "2019-03-20",
"units": "10"
}
]
}
GET /v3/custody/accounts/{id}/transactions
Fetch a list of custodian ledger transactions for the specified custody account. This is the authoritative record of cash activity: the status field reflects the custodian's settlement state (Pending, Settled, or Returned), and referenceNumber ties each transaction back to the originating fund move. Transactions are ordered by transaction date with the most recent at index zero.
Permissions
This method requires the scope custody_transaction.read to be granted to the calling API key. Transaction records are PII-high: unless the key holds the pii_high level for this scope, all but a base set of fields (including name) are redacted from the response.
This scope can be assigned by system admins through the API or Transact Portal.
Authorization
Header: Authorization: Bearer clientId:apiKey
Query Parameters
| Parameter | Type | Default | Description |
offset | integer | 0 | The row index at which to begin the query. Zero represents the first transaction in the list. |
limit | integer | 10 | The maximum number of transactions to return. Max value is 500. |
deleted | boolean | false | Include deleted transactions in response. |
filter | string (JSON) | | Filter results by specific fields (e.g. referenceNumber, status). |
Response Fields
| Field | Type | Description |
id | string | Custodian transaction identifier. |
method | string | Processing method: ACH, Wire, Check, Transfer, or Fee. Casing is not normalized by the custodian, so compare case-insensitively. |
date | string (YYYY-MM-DD) | Transaction date. |
name | string | Customer name (PII; redacted without pii_high). |
amountCents | integer | Transaction amount in cents. Always positive; use type for direction. |
type | string | Direction of the cash movement: Credit (funds into the account) or Debit (funds out). |
subtype | string | Cash transaction category from the custodian's configurable list (e.g. MMF - Purchase, MMF - Redemption). Not a fixed enumeration. |
brokerageAccountId | string | Custodian brokerage account identifier. |
notes | string | Free-form notes. |
status | string | Settlement state: Pending (awaiting settlement), Settled (completed), or Returned (rejected/reversed). Only Settled transactions count toward the account's available cash balance. |
referenceNumber | string | Reference number linking the transaction to the originating fund move (the value passed to createCustodyFundMove). |
accountId | string | TAPI account identifier. |
settledDate | string (YYYY-MM-DD) | Scheduled/actual settlement date. Settlement is keyed off this date, so it is known before status becomes Settled. |
checkNumber | string | Check number, when method is Check. |
deleted | boolean | Whether the transaction has been logically deleted (custodian virtualStatus of DELETED). Deleted rows are excluded unless deleted=true is passed. |
createdDate | string (YYYY-MM-DD HH:MM:SS) | Record creation timestamp. |
updatedDate | string (YYYY-MM-DD HH:MM:SS) | Record last-updated timestamp. |
cashSendConfirmation | string | Cash send confirmation reference, when applicable. |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"barc_transactions": [
{
"id": "BT0001234",
"method": "ACH",
"date": "2025-02-12",
"name": "John Investor",
"amountCents": 150000,
"type": "Credit",
"subtype": "MMF - Purchase",
"brokerageAccountId": "1042",
"notes": "",
"status": "Settled",
"referenceNumber": "481724317",
"accountId": "A07545866",
"settledDate": "2025-02-14",
"checkNumber": "",
"deleted": false,
"createdDate": "2025-02-12 17:11:17",
"updatedDate": "2025-02-14 06:00:02",
"cashSendConfirmation": ""
}
],
"pagination": {
"totalRecords": 1,
"startIndex": 0,
"endIndex": 0
}
}
GET /v3/custody/accounts
This endpoint retrieves a paginated list of custody account records owned by the authenticated client. Each record represents the custody (custodial account request) state for a TAPI account. It supports pagination and filtering.
Permissions
This method requires the scope custody_account.read to be granted to the calling API key; a key without it receives 403 permission denied. Custody account records are PII-high: unless the key holds the pii_high level for this scope, PII fields are redacted from the response rather than the request being denied.
Authorization
All requests require clientID and developerAPIKey parameters for authentication. Only custody accounts owned by the authenticated client's API keys are returned.
Query Parameters
| Parameter | Type | Default | Description |
offset | integer | 0 | The row index at which to begin the query. Zero represents the first record in the list. |
limit | integer | 10 | The maximum number of records to return. Max value is 500. |
deleted | boolean | false | Include deleted records in the response. |
filter | string (JSON) | | Filter results by specific fields (full-equality only). |
Response Fields
The custody_accounts array contains one entry per custody account.
| Field | Type | Description |
accountId | string | TAPI Account ID (e.g. A00000003) the custody record belongs to. |
requestId | string | Custodial account request ID (custAccRequestID). |
status | string | Custody account request status. One of Pending, Need More Info, Approved, Rejected, New Info Added. |
relationship | string | null | Nature of the relationship (natureOfRelationship); null when not set. |
restrictedStatus | string | Whether the account is restricted. One of Yes, No. |
restrictedReason | string | null | Reason the account is restricted. One of Missing Data, Acceptance of Terms, KYC/AML, Suitability, or null when not restricted. |
principalReviewBy | string | Principal who reviewed the request (custprincipalReviewedBy); empty string when none. |
approvalDate | string | Date and timestamp the request was approved (custApprovalDate). |
notes | string | Free-text notes on the custody account. |
createdDate | string | Date and timestamp the record was created. |
updatedDate | string | Date and timestamp the record was last updated. |
| Field | Type | Description |
totalRecords | integer | Total number of matching records. |
startIndex | integer | Zero-based index of the first record returned. |
endIndex | integer | Zero-based index of the last record returned. |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"custody_accounts": [
{
"accountId": "A00000003",
"requestId": "1BIBe0V",
"status": "Approved",
"relationship": null,
"restrictedStatus": "No",
"restrictedReason": null,
"principalReviewBy": "",
"approvalDate": "2025-02-12 17:11:18",
"notes": "",
"createdDate": "2025-02-12 17:11:17",
"updatedDate": "2025-02-12 17:11:18"
}
],
"pagination": {
"totalRecords": 1001,
"startIndex": 0,
"endIndex": 0
}
}
GET /v3/custody/accounts/{id}
This endpoint retrieves a single custody account record by its TAPI Account ID. The response object uses the same fields as the list endpoint, returned under the custody_account key. Returns a 404 if no matching custody account is found for the authenticated client.
Permissions
This method requires the scope custody_account.read to be granted to the calling API key; a key without it receives 403 permission denied. Custody account records are PII-high: unless the key holds the pii_high level for this scope, PII fields are redacted from the response rather than the request being denied.
Authorization
All requests require clientID and developerAPIKey parameters for authentication. The account must be owned by one of the authenticated client's API keys.
Path Parameters
| Parameter | Type | Required | Description |
id | string | Yes | TAPI Account ID (e.g. A00000003) of the custody account to retrieve. |
Response Fields
| Field | Type | Description |
accountId | string | TAPI Account ID the custody record belongs to. |
requestId | string | Custodial account request ID (custAccRequestID). |
status | string | Custody account request status. One of Pending, Need More Info, Approved, Rejected, New Info Added. |
relationship | string | null | Nature of the relationship (natureOfRelationship); null when not set. |
restrictedStatus | string | Whether the account is restricted. One of Yes, No. |
restrictedReason | string | null | Reason the account is restricted. One of Missing Data, Acceptance of Terms, KYC/AML, Suitability, or null when not restricted. |
principalReviewBy | string | Principal who reviewed the request (custprincipalReviewedBy); empty string when none. |
approvalDate | string | Date and timestamp the request was approved (custApprovalDate). |
notes | string | Free-text notes on the custody account. |
createdDate | string | Date and timestamp the record was created. |
updatedDate | string | Date and timestamp the record was last updated. |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"custody_account": {
"accountId": "A00000003",
"requestId": "1BIBe0V",
"status": "Approved",
"relationship": null,
"restrictedStatus": "No",
"restrictedReason": null,
"principalReviewBy": "",
"approvalDate": "2025-02-12 17:11:18",
"notes": "",
"createdDate": "2025-02-12 17:11:17",
"updatedDate": "2025-02-12 17:11:18"
}
}
GET /v3/custody/positions
Fetch the aggregated security positions across every custody account owned by the authenticated client. The endpoint collects all custodial accounts belonging to the client's API keys, resolves them to their brokerage accounts, and returns one aggregated row per security where units is the net of all credit and debit security transactions across those accounts.
Permissions
This method requires the scope custody_account.read to be granted to the calling API key. The scope can be assigned by system admins through the API or Transact Portal.
Authorization
All requests require clientID and developerAPIKey parameters for authentication. Only custody accounts owned by the authenticated client's API keys are included.
Response Fields
The positions array contains one entry per security held across the client's custody accounts.
| Field | Type | Description |
id | string | Security identifier (CUSIP or symbol) of the held security. |
date | string | Date (YYYY-MM-DD) of the most recent security transaction for this security. |
units | string | Net number of units held: the sum of credit transaction units minus debit transaction units. |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"positions": [
{
"id": "02587DM96",
"date": "2019-03-20",
"units": "27"
},
{
"id": "40434YGR2",
"date": "2019-03-21",
"units": "1"
},
{
"id": "38148JA92",
"date": "2019-03-22",
"units": "1"
},
{
"id": "DELL12",
"date": "2019-03-20",
"units": "10"
}
]
}
GET /v3/custody/distributions
This endpoint retrieves a paginated list of custody distribution records. A distribution represents a fund movement out of a brokerage (custody) account to either a linked external bank account or to explicit banking details. Records are returned newest-first (ordered by creation time descending). It supports pagination and filtering.
Permissions
This method requires the scope custody_distribution.read to be granted to the calling API key; a key without it receives 403 permission denied. Distribution records are PII-high: unless the key holds the pii_high level for this scope, PII fields are redacted from the response rather than the request being denied. Creating distributions via the POST /v3/custody/distributions counterpart requires the custody_distribution.write scope. These scopes can be assigned by system admins through the API or Transact Portal.
Authorization
All requests require clientID and developerAPIKey parameters for authentication. The response includes only custody distributions owned by the authenticated client.
Query Parameters
| Parameter | Type | Default | Description |
offset | integer | 0 | The row index at which to begin the query. Zero represents the first record in the list. |
limit | integer | 10 | The maximum number of records to return. Max value is 500. |
filter | string (JSON) | | Filter results by specific fields (full-equality only). |
Response Fields
The custody_distributions array contains one entry per distribution.
| Field | Type | Description |
id | string (UUID) | Unique distribution identifier. |
submissionId | string (UUID) | Identifier shared by all distributions created in the same submission batch. |
clientId | string | Client identifier that owns the distribution (PII; redacted without pii_high). |
brokerageAccountId | string | Brokerage (custody) account the funds are distributed from. |
amountCents | integer | Distribution amount in cents. |
status | string | Distribution status. One of pending, processing, on_hold, approved, rejected, scheduled, in_review, completed, terminated, failed, reopened. |
accountId | string | null | TAPI Account ID whose linked external bank account receives the funds (mutually exclusive with bankId/bankAccountId). |
bankId | string | null | Bank/routing identifier when distributing to explicit banking details. |
bankAccountId | string | null | Bank account identifier when distributing to explicit banking details. |
transactionType | string | null | Transfer rail. One of ach, wire. |
transactionMemo | string | null | Free-text memo for the transaction. |
createdAt | string (datetime) | Timestamp the distribution was created. |
updatedAt | string (datetime) | Timestamp the distribution was last updated. |
| Field | Type | Description |
totalRecords | integer | Total number of matching records. |
startIndex | integer | Zero-based index of the first record returned. |
endIndex | integer | Zero-based index of the last record returned. |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"custody_distributions": [
{
"id": "a1b2c3d4-5e6f-4a8b-9c0d-1e2f3a4b5c6d",
"submissionId": "f0e1d2c3-b4a5-4968-8776-5a4b3c2d1e0f",
"clientId": "someclientid",
"brokerageAccountId": "BR000123",
"amountCents": 25000,
"status": "pending",
"accountId": "A00000003",
"bankId": null,
"bankAccountId": null,
"transactionType": "ach",
"transactionMemo": "Quarterly distribution",
"createdAt": "2025-02-12 17:11:17",
"updatedAt": "2025-02-12 17:11:18"
}
],
"pagination": {
"totalRecords": 100,
"startIndex": 0,
"endIndex": 0
}
}
POST /v3/getCustodyAccountRequest
This method returns the current status of a custodial account request for the supplied TAPI account.
Parameters
| Parameter | Type | Required | Description |
accountId | string | Yes | Account ID that is generated by the API once an account is created (createAccount) |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/getCustodyAccountRequest
-d clientID=someclientid
-d developerAPIKey=somedeveloperkey
-d accountId=A12716
Response
| Field | Type | Description |
custodialAccountDetails | array | Array of custodial account request records (one element). See fields below. |
Response Fields
| Field | Type | Description |
accountId | string | TAPI Account ID the request belongs to. |
custAccStatus | string | Custodial account request status. One of Pending, Need More Info, Approved, Rejected, New Info Added. |
accountStatus | string | Custody account lifecycle status. One of Pending, Open, Closed. |
custAccRequestID | string | Custodial account request ID. |
restrictedStatus | string | Whether the account is restricted. One of Yes, No. |
reasonForStatus | string | null | Reason the account is restricted. One of Missing Data, Acceptance of Terms, KYC/AML, Suitability, or null when not restricted. |
createdDate | string | Date and timestamp the request was created. |
approvalStatus | string | Approval status of the underlying TAPI account (from transact_account). |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"custodialAccountDetails": [
{
"accountId": "A3177046",
"custAccStatus": "Pending",
"accountStatus": "Pending",
"custAccRequestID": "ROE6ovs",
"restrictedStatus": "No",
"reasonForStatus": null,
"createdDate": "2025-01-03 21:07:24",
"approvalStatus": "Approved"
}
]
}
POST /v3/getCustodialDocuments
This method returns the statements and tax forms generated for a North Capital Private Securities custodial account. Each document URL is a short-lived presigned link (valid for approximately 5 minutes).
Parameters
| Parameter | Type | Required | Description |
accountId | string | Yes | Account ID that is generated by the API once an account is created (createAccount) |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/getCustodialDocuments
-d developerAPIKey=somedeveloperkey
-d clientID=someclientid
-d accountId=accountId
Response
| Field | Type | Description |
accountDetails | array | Array of available documents for the account. See fields below. |
Response Fields
| Field | Type | Description |
Document Type | string | Document classification. One of Statement, Corrected Statement, Tax Document. |
Month | string | Month the document was generated (1-12). 0 for documents that are not month-specific (e.g. annual tax documents). |
Year | string | Year the document was generated. |
StatementURL | string | Short-lived presigned URL to download the document. |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"accountDetails": [
{
"Document Type": "Statement",
"Month": "4",
"Year": "2023",
"StatementURL": "https://prodriaclientrepository.s3.amazonaws.com/...&X-Amz-Signature=..."
}
]
}
POST /v3/getCustodyBalances
This method is used to get the Cash, Securities, and Total account values of a custody account.
Parameters
| Parameter | Type | Required | Description |
accountId | string | Yes | Account ID that is generated by the API once an account is created (createAccount) |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/getCustodyBalances
-d developerAPIKey=somedeveloperkey
-d clientID=someclientid
-d accountId=accountId
Response
| Field | Type | Description |
custodyBalances | array | Array of custody account balances and intents (one entry per account) |
| Field | Type | Description |
accountId | string | Account the request is being made against |
fundMoveIntents | number | The total amount of intended deposits (fund movements into the account), in decimal dollars. Deposits that have been registered with the payment processor but have not been submitted to the bank for processing. |
disbursementIntents | number | The total amount of intended withdrawals (disbursements from the account), in decimal dollars. Withdrawals that have been registered with the payment processor but have not been processed nor initiated. |
cashAvailableBalance | number | The available cash balance of all settled transactions in the account, in decimal dollars. |
cashTotalBalance | number | The total cash balance in the account, including any pending transactions, in decimal dollars. |
securitiesPosition | number | The total value of securities held in the account, in decimal dollars. |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"custodyBalances": [
{
"accountId": "A50648187",
"fundMoveIntents": 200000000,
"disbursementIntents": 1000,
"cashAvailableBalance": 261266.75,
"cashTotalBalance": 262290.2,
"securitiesPosition": 16810
}
]
}
POST /v3/getCustodyCashTransactions
This method returns the paginated cash transaction history (deposits, withdrawals, fees, and other cash activity) for a custody account. Withdrawals/debits are returned as negative amounts. Results are ordered by transaction date, most recent first.
Parameters
| Parameter | Type | Required | Description |
accountId | string | Yes | Account ID that is generated by the API once an account is created (createAccount) |
offset | integer | No | The row index at which to begin the query. Zero represents the first transaction in the list. Defaults to 0. |
limit | integer | No | The maximum number of transactions to return. Defaults to 10. Max value is 500. |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/getCustodyCashTransactions
-d developerAPIKey=somedeveloperkey
-d clientID=someclientid
-d accountId=accountId
-d offset=0
-d limit=10
Response
| Field | Type | Description |
brokerageTransactions | array | Array of cash transactions. See fields below. |
pagination | object | Pagination metadata. |
Response Fields
Each entry in brokerageTransactions:
| Field | Type | Description |
id | string | Brokerage transaction identifier (brokerage_transaction_id). |
date | string | Transaction date (YYYY-MM-DD). |
name | string | Customer / counterparty name on the transaction. |
notes | string | Free-text notes on the transaction. |
status | string | Transaction status (e.g. Pending, Settled). |
referenceNumber | string | Reference number associated with the transaction. |
settledDate | string | Date the transaction settled (YYYY-MM-DD), or 0000-00-00 if not yet settled. |
createdDate | string | Date and timestamp the transaction was created. |
updatedDate | string | Date and timestamp the transaction was last updated. |
amount | string | Signed cash amount; debits (fund_move = Debit) are returned as negative values. |
| Field | Type | Description |
totalRecords | integer | Total number of matching transactions. |
startIndex | integer | Zero-based index of the first transaction returned. |
endIndex | integer | Zero-based index of the last transaction returned. |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"brokerageTransactions": [
{
"id": "CT000021436",
"date": "2024-10-03",
"name": "Chelsea Elting",
"notes": "TEST",
"status": "Settled",
"referenceNumber": "339846456",
"settledDate": "0000-00-00",
"createdDate": "2024-10-03 18:31:44",
"updatedDate": "0000-00-00 00:00:00",
"amount": "100.00"
},
{
"id": "CT000021437",
"date": "2024-10-03",
"name": "Chelsea Elting",
"notes": "TESTING",
"status": "Settled",
"referenceNumber": "417184939",
"settledDate": "0000-00-00",
"createdDate": "2024-10-03 18:35:57",
"updatedDate": "0000-00-00 00:00:00",
"amount": "-5.37"
}
],
"pagination": {
"totalRecords": 2,
"startIndex": 0,
"endIndex": 1
}
}
POST /v3/getCustodyFundMove
Get information about a custody fund move intent (deposit)
Parameters
| Parameter | Type | Required | Description |
referenceNumber | string | Yes | Reference Number that is generated by the API once fund move is completed (fundCustodyAccount) |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/getCustodyFundMove
-d developerAPIKey=somedeveloperkey
-d clientID=someclientid
-d accountId=accountId
-d referenceNumber=somereferencenumber
Response
| Field | Type | Description |
custodyTransaction | object | The fund move transaction. See fields below. |
Response Fields
| Field | Type | Description |
accountId | string | TAPI Account ID the fund move belongs to. |
bankName | string | null | Name of the external bank, when available. |
amount | string | Amount of the fund move (decimal string). |
accountNumber | string | External bank account number (decoded). Empty string when not exposed. |
routingNumber | string | External bank routing number (decoded). |
accountName | string | Name on the external bank account. |
referenceNumber | string | API-generated reference number identifying this fund move. |
description | string | Description provided on the request. |
approvalStatus | string | Internal approval state. |
status | string | Fund move (fundStatus) state. One of Pending, Submitted, Settled, Returned, Voided, Declined. |
routingNumberStatus | string | Routing number verification result (e.g. Verified). |
errors | string | Error detail associated with the transaction; empty string when none. |
createdDate | string | Date and timestamp the fund move was created. |
updatedDate | string | Date and timestamp the fund move was last updated. |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"custodyTransaction": {
"accountId": "A3110006",
"bankName": null,
"amount": "7.000000",
"accountNumber": "",
"routingNumber": "011001726",
"accountName": "",
"referenceNumber": "339846456",
"description": "",
"approvalStatus": "approved",
"status": "Pending",
"routingNumberStatus": "Verified",
"errors": "",
"createdDate": "2024-12-10 22:49:06",
"updatedDate": "2024-12-10 22:49:06"
}
}
POST /v3/getCustodyFundMoves
Get the list of custody fund move intents for a given custody account
Parameters
| Parameter | Type | Required | Description |
accountId | string | No | Account ID that is generated by the API once an account is created (createAccount) |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/getCustodyFundMoves
-d developerAPIKey=somedeveloperkey
-d clientID=someclientid
-d accountId=accountId
Response
| Field | Type | Description |
custodyTransactions | array | Array of fund move transactions. Each entry carries the same fields as the custodyTransaction object returned by getCustodyFundMove. |
pagination | object | Pagination metadata. |
| Field | Type | Description |
totalRecords | integer | Total number of matching fund moves. |
startIndex | integer | Zero-based index of the first fund move returned. |
endIndex | integer | Zero-based index of the last fund move returned. |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"custodyTransactions": [
{
"accountId": "A3110006",
"bankName": null,
"amount": "7.000000",
"accountNumber": "",
"routingNumber": "011001726",
"accountName": "",
"referenceNumber": "339846456",
"description": "",
"approvalStatus": "approved",
"status": "Pending",
"routingNumberStatus": "Verified",
"errors": "",
"createdDate": "2024-12-10 22:49:06",
"updatedDate": "2024-12-10 22:49:06"
},
{
"accountId": "A3110006",
"bankName": null,
"amount": "0.000000",
"accountNumber": "",
"routingNumber": "011001726",
"accountName": "",
"referenceNumber": "417184939",
"description": "",
"approvalStatus": "approved",
"status": "Pending",
"routingNumberStatus": "Verified",
"errors": "",
"createdDate": "2024-12-03 21:56:24",
"updatedDate": "2024-12-03 21:56:24"
},
{
"accountId": "A3110006",
"bankName": null,
"amount": "0.000000",
"accountNumber": "",
"routingNumber": "011001726",
"accountName": "",
"referenceNumber": "916079744",
"description": "",
"approvalStatus": "approved",
"status": "Pending",
"routingNumberStatus": "Verified",
"errors": "",
"createdDate": "2024-12-03 21:47:21",
"updatedDate": "2024-12-03 21:47:21"
},
{
"accountId": "A3110006",
"bankName": null,
"amount": "100.000000",
"accountNumber": "MTExMTIyMjIzMzMzMDAwMA==",
"routingNumber": "MDExMDAxNzI2",
"accountName": "Chelsea Elting",
"referenceNumber": "879361244",
"description": "",
"approvalStatus": "approved",
"status": "SETTLED",
"routingNumberStatus": "Verified",
"errors": "",
"createdDate": "2024-11-26 17:06:53",
"updatedDate": "2024-12-03 21:09:38"
},
{
"accountId": "A3110006",
"bankName": null,
"amount": "51.250000",
"accountNumber": "MTExMTIyMjIzMzMzMDAwMA==",
"routingNumber": "MDExMDAxNzI2",
"accountName": "Chelsea Elting",
"referenceNumber": "520284442",
"description": "investment in ABC",
"approvalStatus": "approved",
"status": "Voided",
"routingNumberStatus": "Verified",
"errors": "",
"createdDate": "2024-10-18 19:13:16",
"updatedDate": "2024-11-04 23:21:17"
}
],
"pagination": {
"totalRecords": 5,
"startIndex": 0,
"endIndex": 4
}
}
POST /v3/getCustodyFundsDisbursement
This method is used to get the current Fund Move Status for Custody fund moves.
Parameters
| Parameter | Type | Required | Description |
filter | string | No | filter by parameters such as {"requestId":"",accountId":""} |
offset | integer | No | The row index at which to begin the query. Zero represents the first record in the list. Defaults to 0. |
limit | integer | No | The maximum number of records to return. Defaults to 10. |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/getCustodyFundsDisbursement
-d developerAPIKey=somedeveloperkey
-d clientID=someclientid
Response
| Field | Type | Description |
custodyFundDisbursements | array | Array of disbursement requests. See fields below. |
pagination | object | Pagination metadata. |
Response Fields
| Field | Type | Description |
requestId | string (UUID) | Unique disbursement request identifier. |
accountId | string | TAPI Account ID the disbursement is drawn from. |
amount | string | Disbursement amount, with two decimal places. |
type | string | Transfer type. One of ach, wire_domestic, wire_international. |
bankId | string | null | Destination bank/routing identifier (wire transfers); empty or null for ACH. |
bankAccountId | string | null | Destination bank account identifier (wire transfers); empty or null for ACH. |
additionalDetails | string | null | Additional instructions provided on the request. |
status | string | Disbursement status. One of pending, processing, on_hold, approved, rejected, scheduled, in_review, completed, terminated, failed, reopened. |
createdDate | string | Date and timestamp the disbursement was created. |
updatedDate | string | Date and timestamp the disbursement was last updated. |
| Field | Type | Description |
totalRecords | integer | Total number of matching records. |
startIndex | integer | Zero-based index of the first record returned. |
endIndex | integer | Zero-based index of the last record returned. |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"custodyFundDisbursements": [
{
"requestId": "baca4059-e3af-43a4-a86b-4838c91be975",
"accountId": "A98780730",
"amount": "20.20",
"type": "wire_domestic",
"bankId": "122100024",
"bankAccountId": "12345688",
"additionalDetails": "",
"status": "pending",
"createdDate": "2024-11-26 20:51:40",
"updatedDate": "2024-11-26 20:52:43"
},
{
"requestId": "953cfa35-37c2-4360-b2ed-78db9fb8b331",
"accountId": "A98780730",
"amount": "20.20",
"type": "ach",
"bankId": "",
"bankAccountId": "",
"additionalDetails": "",
"status": "pending",
"createdDate": "2024-11-26 17:23:05",
"updatedDate": "2024-11-26 17:23:05"
},
{
"requestId": "002717a3-a612-4e94-b517-3f4dbd79b523",
"accountId": "A98780730",
"amount": "20.20",
"type": "ach",
"bankId": "",
"bankAccountId": "",
"additionalDetails": "test",
"status": "pending",
"createdDate": "2024-11-26 15:45:51",
"updatedDate": "2024-11-26 15:45:51"
}
],
"pagination": {
"totalRecords": 3,
"startIndex": 0,
"endIndex": 2
}
}
POST /v3/updateCustodialAccountRequest
This method is used to update the status of an existing custody account request (requestCustodyAccount) when new information has been added. You must update the status to "New Info Added" in order to initiate a re-review of the account.
Parameters
| Parameter | Type | Required | Description |
custAccRequestID | string | Yes | Request ID Generated by the createCustodyAccountRequest method |
custAccRequestStatus | string | Yes | Custody Account status. One of Pending, New Info Added. Set to New Info Added to initiate a re-review of the account. |
notes | string | No | Notes |
updatedIpAddress | string | No | IP Address associated with the updateCustodialAccountRequest method call |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/updateCustodialAccountRequest
-d clientID=someclientid
-d developerAPIKey=somedeveloperkey
-d custAccRequestID=hut67yt
-d custAccRequestStatus=New Info Added
-d notes=Need Info
-d updatedIpAddress=10.0.0.1
Response
| Field | Type | Description |
custodialAccountDetails | array | Array of custodial account request records (one element) |
Response Fields
| Field | Type | Description |
accountId | string | TAPI Account ID the request belongs to. |
custAccStatus | string | Custodial account request status after the update. |
accountStatus | string | Custody account lifecycle status. One of Pending, Open, Closed. |
custAccRequestID | string | Custodial account request ID. |
createdDate | string | Date and timestamp the request was created. |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"custodialAccountDetails": [
{
"accountId": "A43969",
"custAccStatus": "New Info Added",
"accountStatus": "Pending",
"custAccRequestID": "ttsUaKo",
"createdDate": "2018-10-06 07:24:52"
}
]
}
POST /v3/updateCustodyFundMove
This method is used to update the pending ACH transaction to void. This can only be used on a transaction that is in a "Pending" status. "Pending" transactions are submitted for processing at 6:00 PM Eastern Time every business day.
Parameters
| Parameter | Type | Required | Description |
referenceNumber | string | Yes | Reference Number that is generated by the API once an fund custodial Account is initiated ( createCustodyFundMove ) |
status | string | Yes | Set value to "void" to update the pending ACH transaction. This can only be used on a transaction that is in a "Pending" status. "Pending" transactions are submitted for processing at 6:00 PM Eastern Time every business day. |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/updateCustodyFundMove
-d developerAPIKey=somedeveloperkey
-d clientID=someclientid
-d referenceNumber=313889266
-d status=void
Response
| Field | Type | Description |
custodyTransaction | object | Custody transaction details |
Example Response
{
"statusCode": "101",
"statusDesc": "Ok",
"custodyTransaction": {
"accountId": "A3110006",
"bankName": null,
"amount": "7.000000",
"accountNumber": "",
"routingNumber": "011001726",
"accountName": "",
"referenceNumber": "339846456",
"description": "",
"approvalStatus": "approved",
"status": "void",
"routingNumberStatus": "Verified",
"errors": "",
"createdDate": "2024-12-10 22:49:06",
"updatedDate": "2024-12-10 23:20:06"
}
}
POST /v3/updateCustodyPartySupplement
This method is used to update the additional fields that may be required in order to open a custodial account through North Capital Private Securities.
Parameters
| Parameter | Type | Required | Description |
partyId | string | Yes | Party ID that is generated by the API once a party is created (createParty) |
relationship | string | No | The party's relationship to the account owner. Put "owner" if this is the account owner. |
salutation | string | No | The party's title. Enum: Mr., Mrs., Ms., Dr. Deprecated aliases: 1 (Mr.), 2 (Mrs.), 3 (Ms.), 4 (Dr.). The field is not validated, so any other value is stored as sent. |
countryOfCitizenship | string | No | Party's country of citizenship. |
authorizedSigner | string | No | Is this party the authorized signer for the account? Enum (case-insensitive): Yes, No. Deprecated aliases: 1 (Yes), 2 (No). Any other value stores an empty string. |
controlPerson | string | No | Is this party a control person for the account? Enum (case-insensitive): Yes, No. Deprecated aliases: 1 (Yes), 2 (No). Any other value stores an empty string. |
politicallyExposedPerson | string | No | Is this person considered a politically exposed person? Enum (case-insensitive): Yes, No. Deprecated aliases: 1 (Yes), 2 (No). Any other value stores an empty string. |
politicallyExposedPersonDetails | string | No | If the person selects "Yes" that they are a politically exposed person, then this field is required. Please provide the details of the politically exposed person. |
beneficiaryType | string | No | The beneficiary type, if this party is a beneficiary for the account. Enum: Spouse, Non-Spouse, Trust/Entity. Deprecated aliases: 1 (Spouse), 2 (Non-Spouse), 3 (Trust/Entity). The field is not validated, so any other value is stored as sent. |
beneficiaryPercentage | string | No | If this party is a beneficiary for the account, please provide the percentage. Stored as sent and not validated. |
mailingAddressLine1 | string | No | Mailing Address Line 1 |
mailingAddressLine2 | string | No | Mailing Address Line 2 |
mailingCity | string | No | Mailing Address City |
mailingState | string | No | Mailing Address State |
mailingZipCode | string | No | Mailing Address Zip Code |
mailingCountry | string | No | Mailing Address Country |
publicCompany | string | No | Is this party associated with a public company? Enum (case-insensitive, stored lowercase): Yes, No. Deprecated aliases: 1 (Yes), 2 (No). Any other value stores an empty string. |
companyTicker | string | No | Company Ticker if the party is associated with a public company |
associatedFirm | string | No | If the party is associated with a broker dealer, please indicate the name of the Associated Firm |
createdIpAddress | string | No | IP address recorded against the record |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/updateCustodyPartySupplement
-d clientID=someclientid
-d developerAPIKey=somedeveloperKey
-d partyId=somepartyid
-d relationship=owner
-d salutation=Mr
-d countryOfCitizenship=citizenship
-d authorizedSigner=yes
-d controlPerson=yes
-d politicallyExposedPerson=yes
-d politicallyExposedPersonDetails=some details
-d beneficiaryType=Spouse
-d beneficiaryPercentage=100
-d mailingAddressLine1=address1
-d mailingAddressLine2=address2
-d mailingCity=city
-d mailingState=state
-d mailingZipCode=54321
-d mailingCountry=US
-d publicCompany=yes
-d companyTicker=test
-d associatedFirm=test
Response
| Field | Type | Description |
party details | object | The identifiers of the updated record |
Fields omitted from the request keep their stored values. If the party has no supplement record, the response is statusCode 200 with Error(s) set to This partyId is not added in addCustodyPartySupplement. — the error text names the deprecated alias addCustodyPartySupplement, not the current endpoint.
Example Response
{
"statusCode": "101",
"statusDesc": "Party updated successfully.",
"party details": {
"clientID": "someclientid",
"developerAPIKey": "XXXXXXXXXXXXXXX",
"partyId": "P43256"
}
}
POST /v3/getCustodyPartySupplement
This method is used to retrieve the additional fields stored for a party through createCustodyPartySupplement.
Parameters
| Parameter | Type | Required | Description |
partyId | string | Yes | Party ID that is generated by the API once a party is created (createParty) |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/getCustodyPartySupplement
-d clientID=someclientid
-d developerAPIKey=somedeveloperKey
-d partyId=somepartyid
Response
| Field | Type | Description |
party details | object | The stored party details |
The response carries the stored values for every field accepted by createCustodyPartySupplement, plus partyType (Individual or Entity). salutation is returned as primappTitle. developerAPIKey is masked.
Example Response
{
"statusCode": "200",
"statusDesc": "Ok",
"party details": {
"clientID": "someclientid",
"developerAPIKey": "XXXXXXXXXXXXXXX",
"partyId": "P2726935",
"partyType": "Individual",
"primappTitle": "Mr.",
"relationship": "owner",
"countryOfCitizenship": "usa",
"authorizedSigner": "Yes",
"controlPerson": "No",
"politicallyExposedPerson": "No",
"politicallyExposedPersonDetails": "",
"beneficiaryType": "Spouse",
"beneficiaryPercentage": "100",
"mailingAddressLine1": "123 Testing Way",
"mailingAddressLine2": "",
"mailingCity": "Orem",
"mailingState": "UT",
"mailingZipCode": "84097",
"mailingCountry": "usa",
"publicCompany": "no",
"companyTicker": "",
"associatedFirm": ""
}
}
If the party has no supplement record, the response is statusCode 200 with Error(s) set to This partyId is not added in addCustodyPartySupplement. — the error text names the deprecated alias addCustodyPartySupplement, not the current endpoint.
POST /v3/deleteCustodyPartySupplement
This method is used to delete the additional fields stored for a party. The record is soft deleted and a new supplement can be created for the same party afterwards.
Parameters
| Parameter | Type | Required | Description |
partyId | string | Yes | Party ID that is generated by the API once a party is created (createParty) |
createdIpAddress | string | No | IP address recorded against the deletion |
Example Request
curl -k -X POST https://api-sandboxdash.norcapsecurities.com/v3/deleteCustodyPartySupplement
-d clientID=someclientid
-d developerAPIKey=somedeveloperKey
-d partyId=somepartyid
Response
| Field | Type | Description |
party details | object | The identifiers of the deleted record |
Example Response
{
"statusCode": "101",
"statusDesc": "Party deleted successfully.",
"party details": {
"clientID": "someclientid",
"developerAPIKey": "XXXXXXXXXXXXXXX",
"partyId": "P43256"
}
}
Deleting a record that is already deleted returns statusCode 200 with Error(s) set to Party already deleted. If the party never had a supplement record, the response is statusCode 200 with Error(s) set to This partyId is not added in addCustodyPartySupplement. — the error text names the deprecated alias, not the current endpoint.