moov-io / fed Goto Github PK
View Code? Open in Web Editor NEWFuzzy FedACH and FedWire ABA Routing Number and Bank Name Lookup.
Home Page: https://moov-io.github.io/fed/
License: Apache License 2.0
Fuzzy FedACH and FedWire ABA Routing Number and Bank Name Lookup.
Home Page: https://moov-io.github.io/fed/
License: Apache License 2.0
We need to release Windows binaries on each release.
Search the routing number dictionary for results on the first two digits of a routing number or more. Lookup the RTN and get an array of possible results back. I am not sure if you will need to pass a state in the query or not.
Sending and RTN starting with "07391" should have 91 FedACH results (see below).
An example can be seen here:
https://www.frbservices.org/EPaymentsDirectory/achResults.html?bank=&aba=07391&state=IA&city=+&submitButton=Search&referredBy=searchAchPage
This will ultimately be exposed as a rest endpoint with pagination.
Row | Routing number | Name | City | State |
---|---|---|---|---|
1 | 0739-1004-6 | CENTER POINT BANK & TRUST CO | CENTER POINT | IA |
2 | 0739-1009-1 | FIRST CENTRAL STATE BANK | DE WITT | IA |
3 | 0739-1011-4 | COMMUNITY STATE BANK | JOHNSTON | IA |
4 | 0739-1023-7 | FIRST NATIONAL BANK | SHENANDOAH | IA |
5 | 0739-1026-6 | CITIZENS SAVINGS BANK | GILMAN | IA |
6 | 0739-1038-9 | WALCOTT TRUST & SAVINGS BA | WALCOTT | IA |
7 | 0739-1074-5 | UNION STATE BANK | GREENFIELD | IA |
8 | 0739-1092-3 | WHITE STATE BANK | SOUTH ENGLISH | IA |
9 | 0739-1106-1 | CITY STATE BANK | NORWALK | IA |
10 | 0739-1127-8 | CRAWFORD COUNTY TRUST & SAVINGS BANK | DENISON | IA |
11 | 0739-1151-1 | BRIDGE COMMUNITY BANK | MECHANICSVILLE | IA |
12 | 0739-1158-2 | IOWA PRAIRIE BANK | BRUNSVILLE | IA |
13 | 0739-1167-6 | FARMERS STATE BANK | MARION | IA |
14 | 0739-1181-2 | ASHTON STATE BANK | ASHTON | IA |
15 | 0739-1187-0 | OHNWARD BANK & TRUST | CASCADE | IA |
16 | 0739-1195-1 | FARMERS SAVINGS BANK | MARSHALLTOWN | IA |
17 | 0739-1206-0 | BENTON COUNTY STATE BANK | BLAIRSTOWN | IA |
18 | 0739-1207-3 | UNITED BANK OF IOWA | IDA GROVE | IA |
19 | 0739-1208-6 | BLUE GRASS SAVINGS BANK | BLUE GRASS | IA |
20 | 0739-1219-6 | BREDA SAVINGS BANK | BREDA | IA |
21 | 0739-1222-2 | STATE BANK OF BROOKS | CORNING | IA |
22 | 0739-1226-4 | SE NATL BK MOLINE | MOLINE | IL |
23 | 0739-1255-2 | FARMERS SAVINGS BANK | COLESBURG | IA |
24 | 0739-1275-6 | DANVILLE STATE SAVINGS BAN | DANVILLE | IA |
25 | 0739-1280-8 | HERITAGE BANK | MARION | IA |
26 | 0739-1283-7 | DENVER SAVINGS BANK | DENVER | IA |
27 | 0739-1319-5 | FAIRFAX STATE SAVINGS BANK | FAIRFAX | IA |
28 | 0739-1321-8 | FREEDOMBANK | ELKADER | IA |
29 | 0739-1330-2 | FARMERS SAVINGS BANK | FREDERIKA | IA |
30 | 0739-1334-4 | SECURITY STATE BANK | RADCLIFFE | IA |
31 | 0739-1342-5 | FIRST STATE BANK | LYNNVILLE | IA |
32 | 0739-1346-7 | GATEWAY STATE BANK | CLINTON | IA |
33 | 0739-1358-0 | WESTSIDE STATE BANK | WESTSIDE | IA |
34 | 0739-1367-4 | MARION COUNTY STATE BANK | PELLA | IA |
35 | 0739-1375-5 | HILLS BANK AND TRUST CO | HILLS | IA |
36 | 0739-1383-6 | LEGACY BANK | MITCHELLVILLE | IA |
37 | 0739-1395-9 | IOWA STATE BANK | CLARKSVILLE | IA |
38 | 0739-1422-0 | LIBERTYVILLE SAVINGS BANK | FAIRFIELD | IA |
39 | 0739-1426-2 | HILLS BANK | LISBON | IA |
40 | 0739-1428-8 | COMMUNITY SAVINGS BANK | MANCHESTER | IA |
41 | 0739-1435-6 | LUANA SAVINGS BANK | LUANA | IA |
42 | 0739-1436-9 | TRUBANK | INDIANOLA | IA |
43 | 0739-1439-8 | FIDELITY BANK AND TRUST | DYERSVILLE | IA |
44 | 0739-1441-1 | FIRST STATE BANK | LYNNVLLE | IA |
45 | 0739-1455-0 | MAYNARD SAVINGS BANK | MAYNARD | IA |
46 | 0739-1482-2 | UNITED BANK OF IOWA | IDA GROVE | IA |
47 | 0739-1486-4 | CEDAR VALLEY BANK AND TRUST | LAPORTE CITY | IA |
48 | 0739-1496-1 | LIBERTY TRUST & SVGS BK | DURANT | IA |
49 | 0739-1519-3 | PALO SAVINGS BANK | PALO | IA |
50 | 0739-1534-2 | GRINNELL STATE BANK | GRINNELL | IA |
51 | 0739-1544-9 | STATE SAVINGS BANK | RAKE | IA |
52 | 0739-1549-4 | READLYN SAVINGS BANK | READLYN | IA |
53 | 0739-1552-0 | FIRST NATIONAL BANK | REMBRANDT | IA |
54 | 0739-1565-6 | ROWLEY SAVINGS BANK | ROWLEY | IA |
55 | 0739-1567-2 | FEDERATION BANK | WASHINGTON | IA |
56 | 0739-1578-2 | PIONEER BANK | SIOUX CITY | IA |
57 | 0739-1581-8 | STATE SAVINGS BANK | BEDFORD | IA |
58 | 0739-1584-7 | NORTHWEST BANK | SPENCER | IA |
59 | 0739-1588-9 | HEARTLAND BANK | MANSON | IA |
60 | 0739-1591-5 | CITIZENS SAVINGS BANK | SPILLVILLE | IA |
61 | 0739-1636-7 | CENTRAL STATE BANK | ELKADER | IA |
62 | 0739-1640-6 | WATKINS SAVINGS BANK | WATKINS | IA |
63 | 0739-1642-2 | WAYLAND STATE BANK | WAYLAND | IA |
64 | 0739-1647-7 | FARMERS & MERCHANTS BANK & TRUST | BURLINGTON | IA |
65 | 0739-1648-0 | WEST CHESTER SAVINGS BANK | MUSCATINE | IA |
66 | 0739-1653-2 | FARMERS SAVINGS BANK | WEVER | IA |
67 | 0739-1654-5 | FIRST TRUST & SAVGS BK | WHEATLAND | IA |
68 | 0739-1666-8 | PILOT GROVE SAVINGS BANK | PILOT GROVE | IA |
69 | 0739-1677-8 | LEIGHTON STATE BANK | LEIGHTON | IA |
70 | 0739-1717-5 | MELVIN SAVINGS BANK | MELVIN | IA |
71 | 0739-1728-5 | PEOPLES SAVINGS BANK | CRAWFORDSVILLE | IA |
72 | 0739-1729-8 | SWISHER TRUST & SAVINGS | SWISHER | IA |
73 | 0739-1764-1 | AMERICAN STATE BANK | SIOUX CENTER | IA |
74 | 0739-1774-8 | AMERICAN TRUST & SAVINGS BK | LOWDEN | IA |
75 | 0739-1788-7 | COMMUNITY STATE BANK | ALBERT CITY | IA |
76 | 0739-1807-7 | SECURITY SAVINGS BANK | FARNHAMVILLE | IA |
77 | 0739-1810-3 | FARMERS STATE BANK | LAKE VIEW | IA |
78 | 0739-1832-3 | FARMERS STATE BANK | YALE | IA |
79 | 0739-1837-8 | HOME STATE BANK | ROYAL | IA |
80 | 0739-1839-4 | ATKINS SAVINGS BANK & TRUST | ATKINS | IA |
81 | 0739-1845-9 | FARMERS SAVINGS BANK AND TRUST | TRAER | IA |
82 | 0739-1856-9 | FARMERS STATE BANK | GRAFTON | IA |
83 | 0739-1860-8 | UNITED BANK & TRUST CO | SHEFFIELD | IA |
84 | 0739-1865-3 | AMERICAN STATE BANK | SIOUX CENTER | IA |
85 | 0739-1884-4 | TITONKA SAVINGS BANK | TITONKA | IA |
86 | 0739-1885-7 | FARMERS TRUST AND SAVINGS BANK | SPENCER | IA |
87 | 0739-1900-5 | FARMERS SAVINGS BANK | FOSTORIA | IA |
88 | 0739-1921-2 | PEOPLES BANK | JEFFERSON | IA |
89 | 0739-1941-6 | PEOPLES BANK | ROCK VALLEY | IA |
90 | 0739-1957-1 | COMMERCIAL SAVINGS BANK | CARROLL | IA |
91 | 0739-1991-1 | SECURITY NATIONAL BANK | SIOUX CITY | IA |
We need to support TLS in our HTTP server. This protects requests from inspection along the various network paths and routing. It's also required as part of several guidelines and audit requirements.
Fed Version: 0.6.0
What were you trying to do?
Conduct an exact match name
search for either FedACH or Fedwire.
What did you expect to see?
One result for each participant that matches.
What did you see?
Duplicated results for each participant that matches.
How can we reproduce the problem?
Use the following FedACH data file:
{
"fedACHParticipants" : {
"response" : {
"code" : 100
},
"fedACHParticipants" : [
{
"routingNumber": "073905527",
"officeCode": "O",
"servicingFRBNumber": "071000301",
"recordTypeCode": "1",
"changeDate": "012908",
"newRoutingNumber": "000000000",
"customerName": "LINCOLN SAVINGS BANK",
"customerAddress": "P O BOX E",
"customerCity": "REINBECK",
"customerState": "IA",
"customerZip": "50669",
"customerZipExt": "0159",
"customerAreaCode" : "319",
"customerPhonePrefix" : "788",
"customerPhoneSuffix" : "6441",
"institutionStatusCode": "1",
"dataViewCode": "1"
}
]
}
}
Run curl "localhost:8086/fed/ach/search?name=LINCOLN+SAVINGS+BANK"
, output below:
{"achParticipants":[{"routingNumber":"073905527","officeCode":"O","servicingFRBNumber":"071000301","recordTypeCode":"1","revised":"012908","newRoutingNumber":"000000000","customerName":"LINCOLN SAVINGS BANK","achLocation":{"address":"P O BOX E","city":"REINBECK","state":"IA","postalCode":"50669","postalCodeExtension":"0159"},"phoneNumber":"3197886441","statusCode":"1","viewCode":"1"},{"routingNumber":"073905527","officeCode":"O","servicingFRBNumber":"071000301","recordTypeCode":"1","revised":"012908","newRoutingNumber":"000000000","customerName":"LINCOLN SAVINGS BANK","achLocation":{"address":"P O BOX E","city":"REINBECK","state":"IA","postalCode":"50669","postalCodeExtension":"0159"},"phoneNumber":"3197886441","statusCode":"1","viewCode":"1"}],"wireParticipants":null}
Notice that a partial match does not return duplicate results:
Run curl "localhost:8086/fed/ach/search?name=LINCOLN"
, output below:
{"achParticipants":[{"routingNumber":"073905527","officeCode":"O","servicingFRBNumber":"071000301","recordTypeCode":"1","revised":"012908","newRoutingNumber":"000000000","customerName":"LINCOLN SAVINGS BANK","achLocation":{"address":"P O BOX E","city":"REINBECK","state":"IA","postalCode":"50669","postalCodeExtension":"0159"},"phoneNumber":"3197886441","statusCode":"1","viewCode":"1"}],"wireParticipants":null}
We have a use case where we would like to set x-user-id
in the DefaultHeader for every call we make based on a user identifier. However, we're setting up the APIClient when the app starts up so we're not able to set the header at that time, since we want to track every user who makes these API calls. We would also like to avoid setting up a new client every time we want to issue an API call. Would it be possible to have a method attached to APIClient that adds key/value pairs to the DefaultHeader after the client has been created? Something similar to this: https://github.com/moov-io/fed/blob/master/client/client.go#L163. This functionality is also needed in the other APIs as well, ie. paygate, ofac, etc.
Docker container fails to start when FRB_ROUTING_NUMBER
and FRB_DOWNLOAD_CODE
is set
container fails to start with error - panic: problem downloading fedach: temp file: open /tmp/fedach-3993745650: no such file or directory
Full stack trace
ts=2022-08-02T19:29:10Z msg="Starting fed server version v0.8.1" level=info
ts=2022-08-02T19:29:10Z msg="download: attempting fedach" level=info
ts=2022-08-02T19:29:10Z msg="listening on [::]:9096" level=info
ts=2022-08-02T19:29:11Z msg="admin: problem starting admin http: http: Server closed" level=info
panic: problem downloading fedach: temp file: open /tmp/fedach-3993745650: no such file or directory
goroutine 1 [running]:
main.fedACHDataFile({0xa11860?, 0xc00000c1c8?})
/go/src/github.com/moov-io/fed/cmd/server/reader.go:20 +0x174
main.main()
/go/src/github.com/moov-io/fed/cmd/server/main.go:114 +0x506
ts=2022-08-02T19:29:16Z msg="Starting fed server version v0.8.1" level=info
ts=2022-08-02T19:29:16Z msg="download: attempting fedach" level=info
ts=2022-08-02T19:29:16Z msg="listening on [::]:9096" level=info
ts=2022-08-02T19:29:17Z msg="admin: problem starting admin http: http: Server closed" level=info
panic: problem downloading fedach: temp file: open /tmp/fedach-183196970: no such file or directory
goroutine 1 [running]:
main.fedACHDataFile({0xa11860?, 0xc0000a01c8?})
/go/src/github.com/moov-io/fed/cmd/server/reader.go:20 +0x174
main.main()
/go/src/github.com/moov-io/fed/cmd/server/main.go:114 +0x506
Looks the error is coming download.go:90 -> ioutil.TempFile(downloadDirectory, fmt.Sprintf("%s-*", listName))
Digging more, error happens when os/tempfile.go -> OpenFile(name, O_RDWR|O_CREATE|O_EXCL, 0600)
Similar to the OFAC setup this service should have the following basic things. The OFAC main.go is also available as a reference.
github.com/moov-io/base/admin
)http.Server
with timeouts and shutdown hookgithub.com/moov-io/base/http/bind
GET /ping
route for deployment and quick statusNote on auth (replace OFAC with fed here):
Authentication works the following way in paygate:
An HTTP call like
GET /v1/depositories/:id
with a cookie or OAuth token will hit our LB (traefik) and a "forward auth" call gets made from traefik to our auth service. The cookie or OAuth token is checked, and if valid '200 OK' is returned to traefik. Only on that '200 OK' is the actual request proxied to paygate (or in this case ofac).
fed api searcher, read FedACHdir.txt file into memory, similar to ofac searcher
Review moov-io\ofac\cmd\server\download.go for basic model
For FEDACH research/consider converting url parameters to ToUpper, should eliminate need for preCompute for FEDACH
Add WireDirectory Test Examples
Hey there,
We're going to start using this project for transfers in our app and some of our designs call for some nice touches like having the logo of the bank and the banks website so you can confirm its correct.
I'd love to see us contribute something like this back if you all or the community at large finds it useful.
Frankly this is something I'd usually just build an index for since it does not change all that often but since Moov is here and I like @wadearnold I figure adding it to this project could benefit the ecosystem at large.
thoughts on this?
I realize if we added logos it would likely eat up some S3 bandwidth costs so will throw that in as a consideration too to be discussed.
Alternatively just adding urls you could use something like the clearbit logo API to make it work without potentially causing any sort of bandwidth problem
I expect a function to take a routing number as input and return a valid record if it exists and nil if it does not.
We need to write up mock endpoints for the HTTP service(s) in this project. There looks to be the following:
Links
I expect to be able to Lookup a financial institution based on its name. This should leverage an exact match of the string initially and return nil if not found.
Add ACHDirectory Test examples
The openapi.yaml
specs define these properties:
ACHDictionary:
description: Search results containing ACHDictionary of Participants
properties:
ACHParticipants:
WIREDictionary:
description: Search results containing WIREDictionary of Participants
properties:
WIREParticipants:
These properties are starting with upper case letters.
However, the service actually returns fields named achParticipants
and wireParticipants
(starting lower case). This is breaking clients that are automatically generated from the openapi.yaml
file.
Please update the openapi.yaml
file. Thank you!
This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.
These updates are awaiting their schedule. Click on a checkbox to get an update now.
actions/checkout
, actions/setup-go
, bulma-clean-theme
, github.com/docker/docker
, github.com/hashicorp/golang-lru
, github/codeql-action
)actions/download-artifact
, actions/upload-artifact
)These updates have all been created already. Click a checkbox below to force a retry/rebase of any.
github.com/moov-io/base
, go
)docs/Gemfile
bulma-clean-theme undefined
github-pages undefined
jekyll-feed "~> 0.12"
tzinfo "~> 1.2"
wdm "~> 0.1.1"
docker-compose.yml
Dockerfile
golang 1.22
Dockerfile-fedtest
golang 1.22-alpine
Dockerfile-openshift
.github/workflows/codeql.yaml
actions/checkout v2
github/codeql-action v2
github/codeql-action v2
.github/workflows/go.yml
actions/setup-go v4
actions/checkout v2
actions/setup-go v4
actions/checkout v2
.github/workflows/podman.yml
actions/setup-go v4
actions/checkout v2
redhat-actions/buildah-build v2
redhat-actions/podman-login v1
redhat-actions/push-to-registry v2
.github/workflows/release.yml
actions/setup-go v4
actions/checkout v2
actions/create-release v1
actions/upload-artifact v1
actions/setup-go v4
actions/checkout v2
actions/download-artifact v1
actions/upload-release-asset v1
actions/upload-release-asset v1
actions/upload-release-asset v1
actions/setup-go v4
actions/checkout v2
go.mod
go 1.21
go 1.22.4
github.com/antihax/optional v1.0.0
github.com/clearbit/clearbit-go v1.1.0
github.com/docker/docker v24.0.9+incompatible
github.com/go-kit/kit v0.13.0
github.com/gorilla/mux v1.8.1
github.com/hashicorp/golang-lru v0.6.0
github.com/moov-io/base v0.49.4
github.com/prometheus/client_golang v1.19.1
github.com/stretchr/testify v1.9.0
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1@686a1a2994c1
golang.org/x/oauth2 v0.21.0
golang.org/x/text v0.16.0
If a 1-2-1 match is not found in the Name search and optional fuzzy search could be used to handle misspelling or other issues if the name was not found.
A package such as Fuzzy Search could be added to the Bank Name field for better results.
Additional packages to be tested closesmatch
Add travis ci build badge and codecov to readme
Allow search to filter on Zip Code and State Abbreviations.
Farmers State Bank
Is a good example of a search that requires additional filter information to narrow down the result.
The project contains and ACH endpoints and Fedwire endpoints. Currently only the ACH directory is parsed and exposed. We should add FedWire at some point.
Add Error Response
For clarification , the docker image is useful to run solely http server, the actual data file link still needs to exist in order to make calls.
I initially thought the lib helped run standalone validation for ACH and wire.
Docker container fails to start when FRB_ROUTING_NUMBER and FRB_DOWNLOAD_CODE is set
Steps to reproduce
Full stack trace
ts=2022-08-02T19:29:10Z msg="Starting fed server version v0.8.1" level=info
ts=2022-08-02T19:29:10Z msg="download: attempting fedach" level=info
ts=2022-08-02T19:29:10Z msg="listening on [::]:9096" level=info
ts=2022-08-02T19:29:11Z msg="admin: problem starting admin http: http: Server closed" level=info
panic: problem downloading fedach: temp file: open /tmp/fedach-3993745650: no such file or directory
goroutine 1 [running]:
main.fedACHDataFile({0xa11860?, 0xc00000c1c8?})
/go/src/github.com/moov-io/fed/cmd/server/reader.go:20 +0x174
main.main()
/go/src/github.com/moov-io/fed/cmd/server/main.go:114 +0x506
ts=2022-08-02T19:29:16Z msg="Starting fed server version v0.8.1" level=info
ts=2022-08-02T19:29:16Z msg="download: attempting fedach" level=info
ts=2022-08-02T19:29:16Z msg="listening on [::]:9096" level=info
ts=2022-08-02T19:29:17Z msg="admin: problem starting admin http: http: Server closed" level=info
panic: problem downloading fedach: temp file: open /tmp/fedach-183196970: no such file or directory
goroutine 1 [running]:
main.fedACHDataFile({0xa11860?, 0xc0000a01c8?})
/go/src/github.com/moov-io/fed/cmd/server/reader.go:20 +0x174
main.main()
/go/src/github.com/moov-io/fed/cmd/server/main.go:114 +0x506
Looks the error is coming from download.go:90 -> ioutil.TempFile(downloadDirectory, fmt.Sprintf("%s-*", listName))
Digging more, error happens when in os/tempfile.go -> OpenFile(name, O_RDWR|O_CREATE|O_EXCL, 0600)
Update search values in openapi.yml
fed/ach/search
Update City, State, and Postal Code
fed/wire/search
Update City and State
Update schema examples to match search examples
Remove minimum and maximum from search
quote example string values
updates for ping
Add code for fed/wire/search
Offering a logo for each FI and their homepage in search results would make it easier for consumers of Fed to display both in their applications. There's no central / authoritative source for this information, but we may be able to scrape it.
This is an issue to discuss the feature and how we'd implement it as it's been mentioned on slack.
Add a copywriter of moov developers and add an Apache 2 license to the project
What were you trying to do?
To deploy on OpenShift we need to use their base image. This allows a common setup for deployment, scanning, etc.
Also, publish the images to https://quay.io/, Red Hat’s image repository.
It would be fantastic to have a web interface included with Fed for manual searching of the data. This allows for verifying data with specific queries and perform one-off searches that are often needed for support cases.
Example projects with web interfaces in moov-io
The docs state environmental variables, but those aren't read out. Environmental variables split words with underscores.
ACH_JARO_WINKLER_SIMILARITY
ACH_LEVENSHTEIN_SIMILARITY
Both FedACH and FedWire search returns SearchResponse
struct but openapi spec says that it returns ACHDictionary and WIREDictionary respectively.
openapi spec should be updated to return SearchResponse
struct for both FedACH and FedWire.
Hi there,
Currently this routing number 322286188
is listed as
Racho Santa Fe Thrift & Loan but the bank has been renamed to Hatch Bank - would be great to update that in this file if possible
Add codecov, staticcheck, etc, use ofac .travis.yml as a model
Add .codecov.yml
// ToDo: softResultsLimit, hardResultsLimit = 10, 499
WireDirectory Fuzzy search on Bank Name
WireDirectory Routing Number Search (minimum 2 digit search)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.