{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-products/partner-api/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"ACH Originating","description":"Jiko Technologies' external APIs for integrators.","lang":"en-US","siteUrl":"https://docs.jiko.io","projectTitle":"Jiko Technologies API Documentation","jsonLd":{"@context":"https://schema.org","@type":"Organization","name":"Jiko Technologies","url":"https://docs.jiko.io","logo":"https://docs.jiko.io/static/jiko-logo-blue.svg"},"llmstxt":{"hide":false,"title":"Jiko Technologies API Documentation","description":"External APIs for integrators","sections":[{"title":"Customer API","includeFiles":["products/customer-api/**/*.md"]},{"title":"Partner API","includeFiles":["products/partner-api/**/*.md"]}]},"meta":[{"name":"robots","content":"index,follow,max-image-preview:large"}]},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"ach-originating","__idx":0},"children":["ACH Originating"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["An ACH origination is an entry Jiko sends on your customer's behalf to a counterparty they have registered and verified. It is the only Jiko rail that moves money in both directions from a single endpoint:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Credit"]}," — funds leave the pocket and are pushed to the counterparty. A withdrawal or disbursement."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Debit"]}," — funds are pulled from the counterparty into the pocket. A funding pull."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Both are originated by the same call against the same counterparty. What makes a debit \"outbound\" is that Jiko originates it, not the direction the money travels."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"api-note"},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"prerequisites","__idx":1},"children":["Prerequisites"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"feature-flags","__idx":2},"children":["Feature flags"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Feature flags are set by Jiko per partner and evaluated against the API user making the request. A call that needs a flag you do not have fails with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["403"]},". Ask your Jiko point of contact for the ones you need."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Flag"},"children":["Flag"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Needed for"},"children":["Needed for"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Without it"},"children":["Without it"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pre_verified_ach_counterparty"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Registering an ACH counterparty. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /api/v2/customers/{customer_id}/counterparties/"]}," with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type: \"ach\""]}," accepts ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pre_verified"]}," verification and nothing else, so every ACH counterparty created through the v2 API passes through this flag"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["403"]}," at counterparty creation. You never reach ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LINKED"]},", so you cannot originate at all"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ccd_sec_code"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Originating with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sec_code: \"CCD\""]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["403"]}," at origination. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WEB"]}," is unaffected"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ccd_sec_code"]}," check runs before the idempotency block, so a denied request does not spend your ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Jiko-Idempotency"]}," value or your ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transfer_id"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"everything-else","__idx":3},"children":["Everything else"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["ACH origination enabled on your partnership."]}," Commercial rather than a flag. Contact your Jiko point of contact."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["An approved customer."]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["customer_id"]}," comes from an application that reached ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["APPROVED"]}," — see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/partner-api/guides/building/onboarding-individuals"},"children":["Onboarding individuals"]}," and ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/partner-api/guides/building/onboarding-businesses"},"children":["Onboarding businesses"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["A pocket in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["OPEN"]}," status."]}," A pocket is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PENDING"]}," while it is being opened; ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FROZEN"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CLOSED"]}," pockets cannot originate."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["An ACH counterparty in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LINKED"]}," status"]},", registered against the customer who owns the pocket. This is the one that catches integrations out. Jiko never sends to a raw routing and account number, and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PENDING"]}," is not enough. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FAILED"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["UNLINKED"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CLOSED"]}," are terminal — none of them returns to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LINKED"]},", so recovering means registering a new counterparty. Wait for the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["counterparty.status.linked"]}," webhook rather than assuming."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Balance that can actually move, for a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CREDIT"]},"."]}," A pocket's balance is held in T-Bills. Read ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["liquidation_value_t0"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["liquidation_value_t1"]}," on the pocket's portfolio, not ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["total_value"]},". A ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DEBIT"]}," has no such requirement — funds are arriving, not leaving."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["An ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Jiko-Idempotency"]}," header."]}," Required on every create call. Supply a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transfer_id"]}," as well."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["A webhook subscription"]},", unless you intend to poll. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /api/v1/subscriptions/"]}," for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transfers.ach.out.sent"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transfers.ach.out.success"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transfers.ach.out.rejected"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["counterparty.status.linked"]},". Subscriptions are recorded against the API user that creates them, so subscribe with the user whose traffic you want to hear about."]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"register-the-ach-counterparty","__idx":4},"children":["Register the ACH counterparty"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"POST /api/v2/customers/{customer_id}/counterparties/\n"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type: \"ach\""]}," accepts one verification type, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pre_verified"]},". You assert that you have already verified the account on your side, and say how:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"verification.verification_method"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["verification.verification_method"]}]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Means"},"children":["Means"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PLAID"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The customer authenticated into the external bank through Plaid on your side"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MICRO_DEPOSIT"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The customer confirmed two small deposits on your side"]}]}]}]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"type\": \"ach\",\n  \"routing_number\": \"021000021\",\n  \"account_number\": \"1234567890\",\n  \"account_type\": \"CHECKING\",\n  \"counterparty_name\": \"Jane Roe\",\n  \"verification\": { \"type\": \"pre_verified\", \"verification_method\": \"PLAID\" }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["There is no verification Jiko drives on your behalf here — no Plaid flow Jiko hosts, no micro-deposits Jiko sends. Both values describe work you did. That makes ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pre_verified_ach_counterparty"]}," a hard prerequisite rather than an optimization; see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#prerequisites"},"children":["Prerequisites"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A debit in particular cannot be made against an unverified account, because verification is what establishes your customer's right to pull from it."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"workflow","__idx":5},"children":["Workflow"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Partner systems:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Verify the external account on your own side, by Plaid or by micro-deposits."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Create the counterparty with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type: \"ach\""]}," and a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pre_verified"]}," verification block naming which method you used."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Wait for the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["counterparty.status.linked"]}," webhook. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PENDING"]}," is not enough to originate against."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Originate against ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["counterparty_id"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"relevant-api-endpoints","__idx":6},"children":["Relevant API endpoints"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Step"},"children":["Step"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Purpose"},"children":["Purpose"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Endpoint"},"children":["Endpoint"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["1"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Register the external account as a counterparty"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["POST ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/api/v2/customers/{customer_id}/counterparties/"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["2"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Check the counterparty's status directly, rather than waiting on the webhook"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["GET ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/api/v2/customers/{customer_id}/counterparties/{counterparty_id}/"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["3"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["List a customer's counterparties"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["GET ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/api/v2/customers/{customer_id}/counterparties/"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"create-an-origination","__idx":7},"children":["Create an origination"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"POST /api/v1/jiko-accounts/{account_id}/ach-originating/\n"},"children":[]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Notes"},"children":["Notes"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["counterparty_id"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The linked ACH counterparty"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["amount_usdc"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Amount in USD cents"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["direction"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CREDIT"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DEBIT"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sec_code"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WEB"]}," (default) or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CCD"]},". ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CCD"]}," is enabled per partner"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["company_entry_description"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Up to 10 characters, letters, digits and spaces only. Required when ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sec_code"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CCD"]},". Defaults when omitted on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WEB"]},": ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Funding TX"]}," for a credit, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Release TX"]}," for a debit"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payment_related_information"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Addenda text. At most one entry on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WEB"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CCD"]},", each up to 80 characters"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transfer_id"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Client-generated UUID for idempotency. Optional, strongly recommended"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Jiko-Idempotency"]}," is a required header on this endpoint."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"retrying-safely","__idx":8},"children":["Retrying safely"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Send a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transfer_id"]}," you generate yourself. Retrying with the same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transfer_id"]}," returns the original transfer instead of creating a second one, so a request that times out mid-flight can be repeated without risking a duplicate debit."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Generate ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transfer_id"]}," once per transfer, not once per attempt. Generating a new one inside a retry loop creates a new transfer on every attempt."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A retry returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["200"]}," with the transfer's ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["current"]}," status, which is indistinguishable from a fresh create. A transfer created two days ago comes back with the status it has now, not ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PENDING"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transfer_id"]}," must be unique across all of your transfers, not just ACH originations. Reusing a value spent on another transfer type is rejected."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You cannot reuse a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transfer_id"]}," to retry a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["REJECTED"]}," transfer — the rejected transfer is what comes back. Make a fresh attempt with a new ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transfer_id"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The nil UUID (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["00000000-0000-0000-0000-000000000000"]},") is rejected. It is what an uninitialized client variable serializes to, and it would succeed once and then conflict with itself forever."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Reusing a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transfer_id"]}," with a different body returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["409 jiko.errors.transfers.ACHTransferIdConflictError"]},". A retry must repeat both the same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transfer_id"]}," and the same body."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If you omit ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transfer_id"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Jiko-Idempotency"]}," behaves as it does everywhere else: a repeated value within the hour is rejected with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["409 jiko.errors.DuplicateRequestError"]},". That header only rejects duplicates — it cannot hand you back the original — so ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transfer_id"]}," is the better choice for anything that needs to be retried."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"relevant-api-endpoints-1","__idx":9},"children":["Relevant API endpoints"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Step"},"children":["Step"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Purpose"},"children":["Purpose"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Endpoint"},"children":["Endpoint"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["1"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Create the origination"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["POST ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/api/v1/jiko-accounts/{account_id}/ach-originating/"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["2"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Read one back, by the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transfer_id"]}," you supplied"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["GET ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/api/v1/jiko-accounts/{account_id}/ach-originating/{transfer_id}/"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["3"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["List a pocket's originations"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["GET ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/api/v1/jiko-accounts/{account_id}/ach-originating/"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["4"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["List a customer's originations"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["GET ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/api/v1/customers/{customer_id}/ach-originating/"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"settlement-timing","__idx":10},"children":["Settlement timing"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Settlement on this rail is covered in full by ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/partner-api/guides/ach-windows"},"children":["ACH Transfer Settlement Timing"]},", which explains the processing windows, the delay before an entry reaches the network, and the delay after it before Jiko marks a transfer settled. Read it before you quote a payout time to an end customer."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["One point belongs here, because it is about the call you are making rather than about the network."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A pocket's balance is held in T-Bills, not idle cash. Before an outbound ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["credit"]}," can be released, the amount has to be liquidated and that sale has to settle. Read ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["liquidation_value_t0"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["liquidation_value_t1"]}," on the pocket's portfolio before instructing: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["total_value"]}," is what the customer owns, and the liquidation values are what can actually be moved, and when. An instruction whose liquidation has not settled cannot reach the network that day, whatever the amount and whatever the hour."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["debit"]}," origination has no such leg. Funds are arriving, not leaving."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"lifecycle","__idx":11},"children":["Lifecycle"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Status"},"children":["Status"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Meaning"},"children":["Meaning"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PENDING"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Accepted by Jiko, not yet released"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["APPROVED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Cleared Jiko's checks"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["IN_TRANSIT"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Sent to the ACH network"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PROCESSED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Completed"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["REJECTED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Rejected before or after sending"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FAILED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Could not be processed"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CANCELLED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Cancelled before release"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Completion is not finality."]}," The receiving bank can return an entry days after it settles — insufficient funds, a closed account, an unauthorized debit. A return reverses the money movement and appears as a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["separate transaction"]},", not as a status change on the original origination. Do not treat ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PROCESSED"]}," as the end of the story, particularly for debits."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"webhooks","__idx":12},"children":["Webhooks"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Event"},"children":["Event"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Meaning"},"children":["Meaning"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transfers.ach.out.sent"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Entry released to the network"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transfers.ach.out.success"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Entry processed"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transfers.ach.out.rejected"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Entry rejected"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Payload: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["jiko_account_id"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ach_origination_id"]},". The origination is directly retrievable, so there is no need to scan the transaction feed. Intermediate statuses such as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PENDING"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["APPROVED"]}," raise no event."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"endpoints","__idx":13},"children":["Endpoints"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Operation"},"children":["Operation"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Endpoint"},"children":["Endpoint"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Create an origination"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /api/v1/jiko-accounts/{account_id}/ach-originating/"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["List a pocket's originations"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /api/v1/jiko-accounts/{account_id}/ach-originating/"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Get an origination"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /api/v1/jiko-accounts/{account_id}/ach-originating/{transfer_id}/"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["List a customer's originations"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /api/v1/customers/{customer_id}/ach-originating/"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Both list endpoints are cursor-paginated and accept ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["filter[status]"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["direction"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"reading-the-money","__idx":14},"children":["Reading the money"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["An origination appears in the transaction feed as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type: \"ACH\""]}," with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ach_direction: \"ORIGINATION\""]},":"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ach_id"]}," — the origination ID, matching ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ach_origination_id"]}," from the webhook"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["company_name"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["company_entry_description"]}," — as submitted"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["direction"]}," — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DEBIT"]}," where funds left the pocket, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CREDIT"]}," where they were pulled in"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["trace_number"]}," — ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["not populated on originations"]},". It is only present on entries Jiko received"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ach_direction"]}," distinguishes ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ORIGINATION"]}," from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["RECEIVING"]},". It is not the credit/debit direction — use the base ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["direction"]}," field for that."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Returns appear separately."]}," A returned origination produces a further transaction, also ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type: \"ACH\""]}," but with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ach_direction: \"RECEIVING\""]},", carrying the return's own ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["trace_number"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ach_id"]},". The return does not carry the original origination's ID, so reconciling end to end means matching the original transaction with any later return against the same counterparty and amount."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Feeds:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Operation"},"children":["Operation"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Endpoint"},"children":["Endpoint"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Pocket transactions"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /api/v2/pockets/{pocket_id}/transactions/"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Customer transactions"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /api/v2/customers/{customer_id}/transactions/"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["All partner transactions"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /api/v2/transactions/"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Single transaction"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /api/v2/transactions/{transaction_activity_id}/"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"inbound-ach-for-contrast","__idx":15},"children":["Inbound ACH, for contrast"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/api/v1/customers/{customer_id}/ach-originating/"]}," lists outgoing entries only. Money arriving over ACH is received against a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["portal"]},", not a counterparty, and surfaces only in the transaction feed as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type: \"ACH\""]}," with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ach_direction: \"RECEIVING\""]},". Events are ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transfers.ach.in.success"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transfers.ach.in.rejected"]},", whose payload carries ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["jiko_account_id"]}," and nothing else — treat them as a signal to go read the pocket's transactions, not as a description of what happened."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["One consequence worth stating plainly to anyone designing an inbound flow: a portal's routing and account number are the customer's bank account details, reachable in ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["both"]}," directions. Anyone holding them can originate a debit against the pocket, exactly as they could against any bank account. Jiko returns the entry if the portal is closed, is not ACH-enabled, or cannot fund it, but a valid debit against an open, funded portal will settle."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"see-also","__idx":16},"children":["See also"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/partner-api/guides/ach-windows"},"children":["ACH Transfer Settlement Timing"]}," — when an entry reaches the network, and when it settles"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/partner-api/reference/ach"},"children":["Create ACH origination"]}," — full request and response schema"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/partner-api/reference/counterparties-v2/create_counterparty_api_v2_customers__customer_id__counterparties__post"},"children":["Counterparties"]}," — registering and verifying the destination"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/partner-api/guides/building/webhooks"},"children":["Webhooks"]}]}]}]},"headings":[{"value":"ACH Originating","id":"ach-originating","depth":1},{"value":"Prerequisites","id":"prerequisites","depth":2},{"value":"Feature flags","id":"feature-flags","depth":3},{"value":"Everything else","id":"everything-else","depth":3},{"value":"Register the ACH counterparty","id":"register-the-ach-counterparty","depth":2},{"value":"Workflow","id":"workflow","depth":3},{"value":"Relevant API endpoints","id":"relevant-api-endpoints","depth":3},{"value":"Create an origination","id":"create-an-origination","depth":2},{"value":"Retrying safely","id":"retrying-safely","depth":3},{"value":"Relevant API endpoints","id":"relevant-api-endpoints-1","depth":3},{"value":"Settlement timing","id":"settlement-timing","depth":2},{"value":"Lifecycle","id":"lifecycle","depth":2},{"value":"Webhooks","id":"webhooks","depth":2},{"value":"Endpoints","id":"endpoints","depth":2},{"value":"Reading the money","id":"reading-the-money","depth":2},{"value":"Inbound ACH, for contrast","id":"inbound-ach-for-contrast","depth":2},{"value":"See also","id":"see-also","depth":2}],"frontmatter":{"seo":{"title":"ACH Originating"}},"lastModified":"2026-09-22T15:26:12.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/partner-api/guides/building/ach-originating","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}