/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
ORsubmission_timeandach_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
| Key | Type | Description |
|---|---|---|
| header | JSON object | Required. 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 handleuser_handle - user_handle to pull funds forOptional 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 |
| transactions | array of strings | Required 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_time | string | Required 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_type | string | Required along with submission_time if transactions is not supplied.Valid options: "NEXT_DAY""SAME_DAY" |
Response Attributes
| Key | Type | Description |
|---|---|---|
success | boolean | true when the request succeeded. |
status | string | SUCCESS or FAILURE. |
transactions | object | With 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_time | string | The expected time, as an ISO 8601 date and time in UTC, to the second: for example 2026-10-08T13:00:00+00:00. |
settlement_timestamp | number | The same time as a Unix epoch timestamp in seconds: for example 1791464400.0. |
reference | string | Your reference from the request header, or one assigned for you. |
sila_reference_id | string | Sila's id for this request. |
response_time_ms | string | How long Sila took to respond, in milliseconds. |
Transactions with no estimate
| Value | When |
|---|---|
"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:
- Settled: the time the pull's funds settled into the end user's wallet.
- Failed or returned: no estimate, as in the table above.
- 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:
| Pull | Created | Settlement date | Expected in the wallet |
|---|---|---|---|
SAME_DAY | Tue 2026-10-06 10:00 ET | Tue 2026-10-06 | Thu 2026-10-08 09:00 ET |
NEXT_DAY | Tue 2026-10-06 10:00 ET | Wed 2026-10-07 | Fri 2026-10-09 09:00 ET |
NEXT_DAY | Fri 2026-10-09 10:00 ET | Tue 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 Code | Success Attribute | Description |
|---|---|---|
| 200 | true | The estimates, as above. |
| 400 | false | Validation 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. |
| 403 | false | Transacting is disabled for your app. |
| 404 | false | A transaction UUID doesn't exist: "The specified transaction is either already locked in a separate transaction or does not exist." |
Updated 16 days ago
