/ach_funds_availability

Use this endpoint to find out the expected settlement time of funds into the Sila wallet of a single end user.

This request takes either a list of ACH pulls already created with /transact, OR a submission_time (past or future) and an ach_type for a pull that would be submitted then. It returns the time the funds are expected to be available in the end user's Sila wallet.

Request

Provide EITHER:

  • transactions
    OR
  • submission_time and ach_type

If transactions is supplied, submission_time and ach_type are ignored.

Authorization / Authentication

Use a valid access token in an Authorization: Bearer request header.

See Authenticating with an Access Token for more details.

POST /0.2/ach_funds_availability HTTP/1.1
sandbox.silamoney.com
Content-Type: application/json
Authorization: Bearer [GENERATED JWT TOKEN HERE]

// With transactions

{
  "header": {
    "created": 1234567890, //required
    "app_handle": "<your app_handle>", //required
    "user_handle": "<user_handle>",
    "version": "0.2",
    "reference": "<your unique id>"
  },
  "transactions": [
    "<transaction UUID 1>",
    "<transaction UUID 2>",
    "<transaction UUID 3>"
  ]
}

// With submission_time and ach_type

{
  "header": {
    "created": 1234567890, //required
    "app_handle": "<your app_handle>", //required
    "user_handle": "<user_handle>",
    "version": "0.2",
    "reference": "<your unique id>"
  },
  "submission_time": "2026-10-06T14:00:00Z",
  "ach_type": "SAME_DAY"
}

***

HTTP/1.1 200 OK

// With transactions: one entry per transaction, keyed by its UUID

{
  "success": true,
  "status": "SUCCESS",
  "transactions": {
    "<transaction UUID 1>": {
      "settlement_time": "2026-10-08T13:00:00+00:00",
      "settlement_timestamp": 1791464400.0
    },
    "<transaction UUID 2>": "N/A, the ACH PULL failed or was returned",
    "<transaction UUID 3>": "N/A, transaction is a ach_redeem not an ACH PULL"
  },
  "reference": "<your unique id>",
  "sila_reference_id": "<sila assigned id>",
  "response_time_ms": "45"
}

// With submission_time and ach_type

{
  "success": true,
  "status": "SUCCESS",
  "settlement_time": "2026-10-08T13:00:00+00:00",
  "settlement_timestamp": 1791464400.0,
  "reference": "<your unique id>",
  "sila_reference_id": "<sila assigned id>",
  "response_time_ms": "45"
}

Request Attributes

KeyTypeDescription
headerJSON objectRequired.

Required keys:

created - Unix epoch timestamp in seconds. Must not be future-dated and must not be dated more than 5 minutes in the past.
app_handle - your app handle
user_handle - user_handle to pull funds for

Optional keys:

reference: Can be any value for your own reference. If not provided, one will be assigned.
version: Cannot be null if key is present. Valid values: 0.2, v0.2, V0.2
transactionsarray of stringsRequired if submission_time and ach_type are not supplied.

Array of up to 100 transaction UUIDs. Can be found in the response to /transact, or in /get_transactions.
submission_timestringRequired along with ach_type if transactions is not supplied.

An ISO 8601 date and time, past or future, at which the pull would be submitted: for example 2026-10-06T14:00:00Z or 2026-10-06T10:00:00-04:00. A time without a UTC offset is taken as UTC. A Unix epoch timestamp is rejected.
ach_typestringRequired along with submission_time if transactions is not supplied.

Valid options:

"NEXT_DAY"
"SAME_DAY"

Response Attributes

KeyTypeDescription
successbooleantrue when the request succeeded.
statusstringSUCCESS or FAILURE.
transactionsobjectWith transactions only. One entry per transaction UUID you sent. The value is either an object with settlement_time and settlement_timestamp, or an "N/A, ..." string when there is no estimate (see below).
settlement_timestringThe expected time, as an ISO 8601 date and time in UTC, to the second: for example 2026-10-08T13:00:00+00:00.
settlement_timestampnumberThe same time as a Unix epoch timestamp in seconds: for example 1791464400.0.
referencestringYour reference from the request header, or one assigned for you.
sila_reference_idstringSila's id for this request.
response_time_msstringHow long Sila took to respond, in milliseconds.

Transactions with no estimate

ValueWhen
"N/A, transaction is a <type> not an ACH PULL"The transaction isn't an ACH pull. For example, an ACH push from /transact gives "N/A, transaction is a ach_redeem not an ACH PULL", because ach_redeem is its type.
"N/A, the ACH PULL failed or was returned"The pull failed, was returned (an R return code), or is under review. A notification of change (NOC) is not a return.

How the estimate works

In production, each pull's estimate is the first of these that applies:

  1. Settled: the time the pull's funds settled into the end user's wallet.
  2. Failed or returned: no estimate, as in the table above.
  3. Otherwise: the first time Sila releases funds after the pull's realization period ends.
    • The realization period counts business days from the pull's settlement date, which is the day the Federal Reserve settles it, and funds are then released at 09:00 ET. The default is two business days, but your app may be configured for a different realization period.
    • Sila releases funds at 09:00, 13:00 and 17:45 ET on Federal Reserve business days. If the realization period ends at another time, or that release has already passed, the estimate is the next release.
    • Once the transaction is sent to the ACH network, the estimate uses its actual settlement date, and before that, the settlement date comes from the cutoffs in the ACH processing schedule, in Eastern time:
      • SAME_DAY: a pull created before the last same-day window, at 13:45 ET, settles that business day. Otherwise it settles the next business day.
      • NEXT_DAY: a pull created before 18:30 ET settles the next business day. Otherwise it settles two business days after creation.
    • Transactions are not processed on weekends or US federal holidays, so those days never count as business days.

submission_time and ach_type always follow step 3, using your app's realization period. The estimate is the first release after the realization period ends, even if that has passed, so a past submission_time gets the release that would have followed it, whenever you ask.

For example, with the default two-day realization period:

PullCreatedSettlement dateExpected in the wallet
SAME_DAYTue 2026-10-06 10:00 ETTue 2026-10-06Thu 2026-10-08 09:00 ET
NEXT_DAYTue 2026-10-06 10:00 ETWed 2026-10-07Fri 2026-10-09 09:00 ET
NEXT_DAYFri 2026-10-09 10:00 ETTue 2026-10-13 (after Columbus Day)Thu 2026-10-15 09:00 ET

📘

Estimates near a cutoff

A pull created close to a cutoff may be estimated a business day early or late, and its estimate is corrected once the transaction is sent to the ACH network.

🚧

Sandbox

Sandbox estimates count minutes, not business days. A pull's estimate is its creation time, or the submission_time, plus 2 minutes, plus 2 more minutes for each business day of your app's realization period: 6 minutes with the default two days.

Responses

Status CodeSuccess AttributeDescription
200trueThe estimates, as above.
400falseValidation error: for example, neither transactions nor submission_time, a submission_time that isn't an ISO 8601 date and time, an ach_type that isn't NEXT_DAY or SAME_DAY, or more than 100 transactions.
403falseTransacting is disabled for your app.
404falseA transaction UUID doesn't exist: "The specified transaction is either already locked in a separate transaction or does not exist."

Did this page help you?