custody/distributions

The Custody Distributions API allows you to create and manage fund distributions from brokerage accounts to external bank accounts. This endpoint supports both domestic (ACH) and international (wire) transfers.

Custody Distributions API Documentation

Overview

The Custody Distributions API allows you to create and manage fund distributions from brokerage accounts to external bank accounts. This endpoint supports both domestic (ACH) and international (wire) transfers.

Base URL

https://api.norcapsecurities.com/v3/custody/distributions

POST /v3/custody/distributions

Create one or more new distribution requests from brokerage accounts to external bank accounts.

Request Body

{
  "newDistributions": [
    {
      "brokerageAccountId": "string",
      "amountCents": "integer",
      "accountId": "string",  // Optional: Use this OR bankId/bankAccountId
      "bankId": "string",     // Optional: Banking routing number or BIC/SWIFT code
      "bankAccountId": "string", // Optional: Bank account number or IBAN
      "transactionType": "string", // Optional: "ach" or "wire"
      "transactionMemo": "string"  // Optional: Memo for the transaction
    }
  ]
}

Parameters

FieldTypeRequiredDescription
newDistributionsarrayYesArray of distribution requests
brokerageAccountIdstringYesThe brokerage account ID (e.g., "NC95156")
amountCentsintegerYesAmount to distribute in cents (e.g., 1234 = $12.34)
accountIdstringConditionalExternal account ID linked to bank account. Required if bankId and bankAccountId not provided
bankIdstringConditionalFor US banks: routing number; For international banks: BIC/SWIFT code. Required if accountId not provided
bankAccountIdstringConditionalBank account number or IBAN. Required if accountId not provided
transactionTypestringNoType of transaction: "ach" or "wire". If not specified, the system will determine the appropriate type
transactionMemostringNoOptional memo or description for the transaction

Note: You must provide either accountId OR both bankId and bankAccountId. Providing both will result in an error.

Response

Success Response (200 OK)

{
  "statusCode": "101",
  "statusDesc": "Ok",
  "distributions": [
    {
      "id": "uuid",
      "submissionId": "uuid",
      "brokerageAccountId": "string",
      "amountCents": "integer",
      "status": "string",
      "accountId": "string",
      "bankId": "string",
      "bankAccountId": "string",
      "transactionType": "string",
      "transactionMemo": "string",
      "createdAt": "datetime",
      "updatedAt": "datetime"
    }
  ]
}

Response Fields

FieldTypeDescription
idstringUnique identifier for the distribution (UUID format)
submissionIdstringIdentifier for the submission batch (UUID format)
brokerageAccountIdstringBrokerage account ID
amountCentsintegerAmount in cents
statusstringCurrent status of the distribution (e.g., "pending")
accountIdstringExternal account ID (null if using bank info directly)
bankIdstringBank routing number or BIC/SWIFT code (null if using accountId)
bankAccountIdstringBank account number or IBAN (null if using accountId)
transactionTypestringType of transaction: "ach" or "wire" (may be null initially)
transactionMemostringMemo or description for the transaction (may be null)
createdAtstringCreation timestamp (YYYY-MM-DD HH:MM:SS)
updatedAtstringLast update timestamp (YYYY-MM-DD HH:MM:SS)

Status Codes

The distribution status can be one of the following:

  • pending (default)
  • processing
  • on_hold
  • approved
  • rejected
  • scheduled
  • in_review
  • completed
  • terminated
  • failed
  • reopened

Error Responses

Status CodeError CodeDescription
4001400Missing required fields or invalid parameters
4221422Invalid banking information (e.g., invalid IBAN)

Common Error Messages

  • Bad request: account ID or banking info required
  • Bad request: only one of account ID or banking info may be specified
  • Bad request: '{id}' is not a valid account ID
  • Bad request: '{accountId}' is not linked to an external account
  • Bad request: brokerage account '{brokerageAccountId}' does not exist
  • Invalid request semantics: not a valid iban

Examples

Example 1: Create a distribution using an external account ID

// Request
POST /v3/custody/distributions
{
  "newDistributions": [
    {
      "brokerageAccountId": "NC95156",
      "amountCents": 1234,
      "accountId": "A1234567890"
    }
  ]
}

// Response
{
  "statusCode": "101",
  "statusDesc": "Ok",
  "distributions": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "submissionId": "550e8400-e29b-41d4-a716-446655440001",
      "brokerageAccountId": "NC95156",
      "amountCents": 1234,
      "status": "pending",
      "accountId": "A1234567890",
      "bankId": null,
      "bankAccountId": null,
      "transactionType": null,
      "transactionMemo": null,
      "createdAt": "2023-05-01 14:30:00",
      "updatedAt": "2023-05-01 14:30:00"
    }
  ]
}

Example 2: Create a distribution using direct bank information

// Request
POST /v3/custody/distributions
{
  "newDistributions": [
    {
      "brokerageAccountId": "NC95156",
      "amountCents": 1234,
      "bankId": "012345678",
      "bankAccountId": "123456789"
    }
  ]
}

// Response
{
  "statusCode": "101",
  "statusDesc": "Ok",
  "distributions": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "submissionId": "550e8400-e29b-41d4-a716-446655440001",
      "brokerageAccountId": "NC95156",
      "amountCents": 1234,
      "status": "pending",
      "accountId": null,
      "bankId": "012345678",
      "bankAccountId": "123456789",
      "transactionType": null,
      "transactionMemo": null,
      "createdAt": "2023-05-01 14:30:00",
      "updatedAt": "2023-05-01 14:30:00"
    }
  ]
}

Example 3: Create a distribution with a specified transaction type and memo

// Request
POST /v3/custody/distributions
{
  "newDistributions": [
    {
      "brokerageAccountId": "NC95156",
      "amountCents": 2222,
      "accountId": "A1234567890",
      "transactionType": "wire",
      "transactionMemo": "from NC95156"
    }
  ]
}

// Response
{
  "statusCode": "101",
  "statusDesc": "Ok",
  "distributions": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "submissionId": "550e8400-e29b-41d4-a716-446655440001",
      "brokerageAccountId": "NC95156",
      "amountCents": 2222,
      "status": "pending",
      "accountId": "A1234567890",
      "bankId": null,
      "bankAccountId": null,
      "transactionType": "wire",
      "transactionMemo": "from NC95156",
      "createdAt": "2023-05-01 14:30:00",
      "updatedAt": "2023-05-01 14:30:00"
    }
  ]
}

Example 4: Create multiple distributions in a single request

// Request
POST /v3/custody/distributions
{
  "newDistributions": [
    {
      "brokerageAccountId": "NC95156",
      "amountCents": 1111,
      "bankId": "012345678",
      "bankAccountId": "123456789"
    },
    {
      "brokerageAccountId": "NC95156",
      "amountCents": 2222,
      "accountId": "A1234567890",
      "transactionType": "wire",
      "transactionMemo": "from NC95156"
    },
    {
      "brokerageAccountId": "NC95156",
      "amountCents": 3333,
      "bankId": "CHASDEFX123",
      "bankAccountId": "ACCT123456789XYZ"
    }
  ]
}

 
Language
Click Try It! to start a request and see the response here!