Skip to content

Create a lending program

POST/api/v1/credit/programs

Stand up a partner lending program. The program carries the parameter envelope, the policy positions, statement branding, and the card-issuing configuration, so onboarding a second partner is a row rather than a build. Operator action: an API token receives 403.

Operation ID: create_program·View as markdown·OpenAPI slice

Authentication

Bearer token authentication. Pass your DayZero API token in the Authorization header and the target business UUID in x-business-id.

Request body

slugstringrequired

Stable partner key, e.g. "tie".

display_namestringrequired

The lender's name as merchants see it: statements, emails, the portal.

statusProgramStatusEnumProgramStatusEnum

draft (being set up) and active both take new lines; paused takes none and stops new originations but services the book; retired is closed. On a live business a program becomes active only while its blocking launch checks pass, unless an operator forces it.

force_activateForceActivateRequest

Operator console only. With status: active on a live business, creates the program active although a blocking launch check fails; the reason, who and when are recorded as activation_override. Without it a program created active that fails a blocking check is refused (CREDIT_660): create it as a draft and activate it once the checklist is green. An API token cannot force (403).

lending_modelLendingModelLendingModel

per_transaction: one loan per card transaction with its own term, due date, fee, and daily accrual after the due date (FRD v2 D-01). cycle_draw: one draw per monthly cycle (FRD v1).

limit_min_centsinteger
limit_max_centsinteger
allowed_term_daysarray · integer

Selectable payback terms. Defaults to [30, 45, 60, 90] (D-03).

default_rate_bpsinteger

Annual rate. 2000 = 20% APR (D-05).

default_disbursement_fee_bpsinteger

Fee assessed once at origination on each transaction, in basis points. 0-500 (0%-5%) per FRD v2 D-04.

max_float_daysinteger
allocation_orderAllocationOrderAllocationOrder

Bucket order a payment fills within one loan (D-10).

loan_orderingLoanOrderingLoanOrdering

Which open loan a payment reaches first (D-11).

interest_accrual_startInterestAccrualStartInterestAccrualStart

Daily accrual starts at the loan's due date (D-07) or at origination.

minimum_payment_centsinteger

Minimum per-loan payment; the outstanding amount when smaller (D-09).

due_soon_daysinteger

Days ahead the due-soon event fires (D-24).

underwriting_wait_daysinteger

Days the nightly sweep leaves a new underwriting assessment pending while the merchant's bank backfill, categorisation and Shopify sync finish. Past it the sweep completes the assessment with whatever data exists. POST .../run never waits.

gl_posting_enabledboolean

Post journal entries on the operator's books (App. A.4).

gl_funding_ledger_idstring

Ledger credited at origination. Default: Card Issuer Payable.

gl_cash_ledger_idstring

Ledger debited on repayment. Default: Cash.

interest_cap_pct_of_principal_bpsinteger

Ceiling on total interest one loan can accrue, as a share of its principal. 2000 = 20%. Null (the default) is uncapped: interest accrues until the loan is repaid (D-07). At the ceiling the loan's interest stops growing, statements bill no further interest, and the loan stays past_due until it is paid. A cap reduces what a long-past-due merchant owes.

card_managementstring

dayzero: DayZero provisions cards and pushes spend limits. partner: the partner provisions in the issuer, registers the card id, and receives credit.line.limit_changed events to push limits itself.

One of: dayzero, partner

deferred_fee_recognitionboolean

Recognise the disbursement fee over the term on the operator's books.

email_statementsboolean

Email the statement PDF to the merchant when it issues.

noticesCreditNoticeSettings

Borrower notices to send, each off unless switched on: due_soon, past_due, loan_paid, statement_issued, collections, limit_changed, and reply_to. Branded from statement_branding.

complianceCompliancePolicy

Compliance policy: disclosures, adverse-action notices and the template versions they use. Null, or enabled: false, changes nothing. See the guide's Compliance section.

bank_settlement_matchingboolean

Settle pending payments from the bank feed: the debit on the line's linked account, or a wire whose sender is a recorded alias, confirms the payment as at the bank date, and a return reverses it. Every decision is listed under GET /credit/lines/{id}/payment-matches.

alert_slack_channelstring
alert_emailsarray · string
allowance_policyobject

Loan-loss allowance buckets, e.g. {"buckets":[{"label":"1–30","from_days":1,"to_days":30,"rate_bps":200}]}.

borrowing_base_policyBorrowingBasePolicy

Borrowing-base eligibility: include_fees, max_days_past_due, exclude_on_hold, concentration_limit_bps, advance_rate_bps. Null means the defaults.

interchange_sourcestring

How interchange is recognised (D-32). estimate: interchange_bps of each cleared settlement, trued up when an issuer report row arrives. issuer_report: only from reported rows. none: not recognised.

One of: none, estimate, issuer_report

interchange_bpsinteger

Estimated interchange rate, e.g. 175 = 1.75%.

statement_balance_modestring

One of: cumulative, cycle_scoped

allocation_scopestring

One of: per_cycle, across_line

cycle_boundary_basisstring

One of: issuer_clearing_date, merchant_local, utc

cycle_close_rulestring

One of: calendar_month_end, anchor_day, operational_trigger

cycle_anchor_dayinteger
excess_credit_dispositionstring

One of: carry_forward, refund_merchant

collections_policyobject

Delinquency ladder (D-31): {"stages": [{"days_past_due": 30, "action": "suspend_cards", "label": "Suspended"}]}. Actions: suspend_cards, suspend_line, notify.

limit_review_policyLimitReviewPolicy

Dynamic limit reviews: on a weekly or monthly cadence each line's limit is re-derived as formula (basis × pct_bps), clamped to the floor/cap and program envelope, held to the step limits, then adjusted by the risk triggers. Null means limits move only by hand.

limit_change_policystring

Who may move a line's credit limit. direct: PATCH /credit/lines/{id} with credit_limit_cents applies it. approval_required: every change is a limit-change request a different console operator approves. console_only: an API token may only request a change; a console operator changes the limit.

One of: direct, approval_required, console_only

late_termsobject

Late fee / late interest rule body. Leave null while undecided — the late path raises rather than guessing a rate (§2.3).

early_payoff_termsobject

interest_rebate (pro_rata | fully_earned) and fee_rebate (none | pro_rata). Null while undecided (§2.5).

underwriting_criteriaarray · object

Partner-owned rule set: key, label, threshold, comparator, source. Null while undecided (§2.7).

legal_lending_entitystring
statement_brandingobject
covenantsobject

Read-only reflection of the Credit Agreement's universal covenants for the partner UI (§10.1): e.g. cash_covenant_bps, negative, affirmative. Not enforced by the ledger.

event_delivery_modeEventDeliveryModeEventDeliveryMode

polling writes the event feed only; webhook also pushes each event to the business's subscribed endpoints; both does both. Polling stays the source of truth.

issuing_enabledboolean

Whether DayZero issues and manages cards for this program's lines through the issuing provider (DayZero-managed cards).

issuing_providerstring

mock runs the card path against an in-memory issuer (Ramp has no sandbox).

One of: ramp, mock

ramp_spend_program_idstring

Ramp spend program the issued cards' funds are created under.

ramp_cardholder_user_idstring

The issuing identity: the one user on your Ramp account every card is issued to. The merchant is never a Ramp user. Verified as a user on the connected Ramp account when set (CREDIT_701 otherwise).

allowed_mcc_codesarray · string

Merchant category codes a card may spend at; mapped to Ramp category codes on the issuer. Empty means no restriction.

blocked_mcc_codesarray · string

Merchant category codes a card may never spend at (sent to Ramp as MCCs).

Responses

201Successful Response

successboolean
messagestring
codestring
dataCreditProgramResponse

400Bad Request - Invalid input

errorstringrequired

Error category: validation_error, unauthorized, forbidden, not_found, conflict, rate_limited, server_error, or service_unavailable.

messagestringrequired

Human-readable explanation, safe to show to end users.

codestringrequired

Stable machine-readable code in CATEGORY_NNN form (e.g. NOT_FOUND_006, AUTH_010, GEN_002).

request_idstring

Correlation id for support requests. Echoes the x-request-id request header when one was supplied.

errorsobject

Field-level validation messages keyed by field name. Present on 400/422 validation failures only.

401Unauthorized - Missing or expired token, an MCP OAuth token used against the REST API, or no access to this business

errorstringrequired

Error category: validation_error, unauthorized, forbidden, not_found, conflict, rate_limited, server_error, or service_unavailable.

messagestringrequired

Human-readable explanation, safe to show to end users.

codestringrequired

Stable machine-readable code in CATEGORY_NNN form (e.g. NOT_FOUND_006, AUTH_010, GEN_002).

request_idstring

Correlation id for support requests. Echoes the x-request-id request header when one was supplied.

errorsobject

Field-level validation messages keyed by field name. Present on 400/422 validation failures only.

403Forbidden - Insufficient permissions

errorstringrequired

Error category: validation_error, unauthorized, forbidden, not_found, conflict, rate_limited, server_error, or service_unavailable.

messagestringrequired

Human-readable explanation, safe to show to end users.

codestringrequired

Stable machine-readable code in CATEGORY_NNN form (e.g. NOT_FOUND_006, AUTH_010, GEN_002).

request_idstring

Correlation id for support requests. Echoes the x-request-id request header when one was supplied.

errorsobject

Field-level validation messages keyed by field name. Present on 400/422 validation failures only.

422Validation Error

errorstringrequired

Error category: validation_error, unauthorized, forbidden, not_found, conflict, rate_limited, server_error, or service_unavailable.

messagestringrequired

Human-readable explanation, safe to show to end users.

codestringrequired

Stable machine-readable code in CATEGORY_NNN form (e.g. NOT_FOUND_006, AUTH_010, GEN_002).

request_idstring

Correlation id for support requests. Echoes the x-request-id request header when one was supplied.

errorsobject

Field-level validation messages keyed by field name. Present on 400/422 validation failures only.