# Create ACH Origination

Originate an ACH transaction with the counterparty.
This can only be done after creating a [Counterparty](/products/partner-api/reference/counterparties-v2/create_counterparty_api_v2_customers__customer_id__counterparties__post) for the account.
### ACH Origination Limitations
- All transfers that are below 25k and scheduled before 12:00 ET are sent with settlement same-day
- All transfers above 25k scheduled before 12:00 ET are sent with settlement next day
- All transfers scheduled after 12:00 ET follow the above rules the following day

### Retrying Safely
Send a `transfer_id` you generate yourself. Retrying with the same `transfer_id`
returns the original transfer instead of creating a second one, so a request
that times out or fails midway can be repeated without risking a duplicate
debit.
- **Generate `transfer_id` once per transfer, not once per attempt.** Generate it
before your first attempt and reuse that value for every retry of that
transfer. Generating a new one inside a retry loop will create a new transfer
on each attempt.
- **A retry returns `200` with the transfer's current status**, which is
indistinguishable from a newly created transfer. A transfer created two days
ago comes back with the status it has now, not `PENDING`.
- **`transfer_id` must be unique across all of your transfers**, not just ACH
originations. Reusing a value already spent on another transfer type is
rejected.
- **You cannot reuse a `transfer_id` to retry a `REJECTED` transfer.** Reusing it
returns the rejected transfer. Making a fresh attempt means generating a new
`transfer_id`.

Reusing a `transfer_id` with a different request body returns
`409 jiko.errors.transfers.ACHTransferIdConflictError`. A retry must repeat both
the same `transfer_id` and the same body.
If you omit `transfer_id`, the `X-Jiko-Idempotency` header behaves as it does on
every other endpoint: a repeated value within the hour is rejected with
`409 jiko.errors.DuplicateRequestError`. That header only rejects duplicates, it
cannot return the original transfer, so `transfer_id` is the better choice for
anything that needs to be retried.

Endpoint: POST /api/v1/jiko-accounts/{account_id}/ach-originating/
Version: Version: 970cd0fc
Security: HTTPBearer

## Description:

  - `ACH Origination Limitations` ()
    All transfers that are below 25k and scheduled before 12:00 ET are sent with settlement same-dayAll transfers above 25k scheduled before 12:00 ET are sent with settlement next dayAll transfers scheduled after 12:00 ET follow the above rules the following day

  - `Retrying Safely` ()
    Send a transfer_id you generate yourself. Retrying with the same transfer_idreturns the original transfer instead of creating a second one, so a requestthat times out or fails midway can be repeated without risking a duplicatedebit. Generate transfer_id once per transfer, not once per attempt. Generate itbefore your first attempt and reuse that value for every retry of thattransfer. Generating a new one inside a retry loop will create a new transferon each attempt.A retry returns 200 with the transfer's current status, which isindistinguishable from a newly created transfer. A transfer created two daysago comes back with the status it has now, not PENDING.transfer_id must be unique across all of your transfers, not just ACHoriginations. Reusing a value already spent on another transfer type isrejected.You cannot reuse a transfer_id to retry a REJECTED transfer. Reusing itreturns the rejected transfer. Making a fresh attempt means generating a newtransfer_id. Reusing a transfer_id with a different request body returns409 jiko.errors.transfers.ACHTransferIdConflictError. A retry must repeat boththe same transfer_id and the same body. If you omit transfer_id, the X-Jiko-Idempotency header behaves as it does onevery other endpoint: a repeated value within the hour is rejected with409 jiko.errors.DuplicateRequestError. That header only rejects duplicates, itcannot return the original transfer, so transfer_id is the better choice foranything that needs to be retried.

## Security:

  - `HTTPBearer` (unknown)
    http bearer

## Path parameters:

  - `account_id` (string, required)

## Header parameters:

  - `x-jiko-idempotency` (string, required)
    A UUID you generate to identify this request. Reusing a value that was already sent is rejected as a duplicate request.

  - `x-jiko-signature` (string, required)
    Base64-encoded HMAC-SHA256 hash of `x-jiko-idempotency + request pathname + body`, keyed with your shared secret. See [Authentication](/products/partner-api/guides/building/auth) for the full algorithm and a code sample.

## Request fields (application/json):

  - `counterparty_id` (string, required)

  - `direction` (string, required)
    Enum: "DEBIT", "CREDIT"

  - `sec_code` (string)
    The Standard Entry Class code of the entry. Defaults to `"WEB"`. **Note:** `"CCD"` needs to be enabled. Please contact your Jiko representative.
    Enum: "CCD", "WEB"

  - `payment_related_information` (array)

  - `transfer_id` (any)
    Optional. A transfer id you assign yourself. Retrying with the same `transfer_id` returns the original transfer instead of creating a second one, so generate it once per transfer and reuse it for every retry of that transfer. Must be unique across all of your transfers, not just ACH originations. Omit it and one is generated for you.

  - `amount_usdc` (integer, required)

  - `company_entry_description` (any)
    Short description of the purpose of the entry (Maximum of 10 characters). Required for sec_code `"CCD"` and `"PPD"`. For sec_code `"WEB"` the default value for DEBIT is "Funding TX" and "Release TX" for CREDIT.

## Response 200:

  - `200` (unknown)
    Successful Response

## Response 200 fields (application/json):

  - `counterparty_id` (string, required)

  - `direction` (string, required)
    Enum: "DEBIT", "CREDIT"

  - `sec_code` (string, required)
    Enum: "CCD", "PPD", "WEB"

  - `payment_related_information` (array, required)

  - `id` (string, required)

  - `amount` (object, required)

  - `amount.value` (integer, required)
    USD values are always in cents.

  - `amount.currency` (string, required)

  - `amount.formatted` (string)

  - `jiko_account_id` (string, required)

  - `status` (string, required)
    Enum: "PENDING", "FAILED", "REJECTED", "PROCESSED", "APPROVED", "IN_TRANSIT", "CANCELLED"

  - `time_created` (string, required)

  - `company_entry_description` (string, required)

  - `object_type` (string, required)

## Response 409:

  - `409` (unknown)
    Conflict

## Response 409 fields (application/json):

  - `type` (string, required)

  - `instance` (string, required)

  - `detail` (string, required)

  - `trace_id` (any)

## Response 422:

  - `422` (unknown)
    Validation Error

## Response 422 fields (application/json):

  - `detail` (array)

  - `detail.loc` (array, required)

  - `detail.msg` (string, required)

  - `detail.type` (string, required)

  - `detail.input` (any)

  - `detail.ctx` (object)

