---
title: "Enroll a customer"
method: POST
path: "/customers/{customer_id}/net-terms-acceptance"
tags: ["Customers"]
---

# Enroll a customer

`POST /customers/{customer_id}/net-terms-acceptance`

## Request

- Base URL: `https://app-sandbox.resolvepay.com/api`
- URL: `https://app-sandbox.resolvepay.com/api/customers/{customer_id}/net-terms-acceptance`
- Auth: one of:
  - HTTP bearer
  - HTTP basic
- TypeScript: <https://skmtc.dev/resolvepay/apis/resolve-partners-api-reference/docs/customers/:customer_id/net-terms-acceptance/post.ts> (a function with typed inputs; its response is checked against the schema)

Records a Net Terms Agreement acceptance captured by you and enrolls an approved customer.
Both happen in one transaction — if enrollment fails, the acceptance is not recorded.

The signed agreement PDF is generated asynchronously, so it is not available in the
response. It records the signer details and IP address supplied here.

## Path parameters

- `customer_id` string, required

## Request body

- CustomerNetTermsAcceptanceRequest
  - `agreement_type` 'net_terms_agreement': The agreement the signer accepted. `net_terms_agreement` is the only accepted value.
  - `signer_name` string, required: Full name of the person who accepted the agreement.
  - `signer_email` string, email, required: Email address of the person who accepted the agreement.
  - `signer_title` string, nullable: Job title of the person who accepted the agreement.
  - `authorization_attestation` true, required: Confirms the signer is authorized to accept the agreement on behalf of the customer. Must be `true` — any other value is rejected with `400`.
  - `external_userinfo` object, required: Evidence captured from the signer's browser at the moment of acceptance. No properties other than `ip` and `user_agent` are accepted.
    - `ip` string, required: IP address the signer accepted from. Must be a single IPv4 or IPv6 address — CIDR notation is not accepted.
    - `user_agent` string, required: User agent string of the browser the signer accepted from.
  - `notify_buyer` boolean: When `true`, Resolve emails the customer to confirm enrollment.
  - `platform_user_id` string: Your own identifier for the user who accepted, stored alongside the acceptance record.
  - `platform_session_id` string: Your own identifier for the session the acceptance was captured in, stored alongside the acceptance record.

## Response `200`

An object representing the enrolled customer, with `net_terms_status` set to `enrolled`.

The response carries no acceptance identifier.

- Customer: The customer object represents a company that does business with your sub-merchants. Retrieve a customer to get a summary of their total credit line and available credit balance. For single-merchant partners, the response includes a `merchant_id` field. For marketplace partners, the `merchant_id` field is not present — customers belong to the marketplace itself.
  - `id` string
  - `merchant_id` string: ID of the sub-merchant this customer belongs to. Only present for single-merchant partners.
  - `external_id` string, nullable: Optional customer identifier from your system. This value is not required to be unique and can be used with the `external_id` list filter.
  - `created_at` string, date-time: Date the customer was created.
  - `updated_at` string, date-time: Date the customer was last updated.
  - `source` 'QUICKBOOKS' | 'MERCHANT_USER' | 'ADMIN_USER' | 'APPLICATION' | 'CUSTOMER_USER' | 'API'
  - `business_address` string: Street address of the business' primary location.
  - `business_city` string: City of the business' primary location.
  - `business_state` string: State or province of the business' primary location.
  - `business_zip` string: US zip code of the business' primary location.
  - `business_country` string: Country of the business' primary location according to the **ISO 3166-1 alpha 2** standard.
  - `business_age_range` '0-2' | '2-5' | '5-10' | '10+': String indicating age of the business in years.
  - `business_ap_email` string: Email address of the business' accounts payable person or department.
  - `business_ap_phone` string: Phone number of the business' accounts payable person or department.
  - `business_ap_phone_extension` string: Phone number extension of the business' accounts payable person or department.
  - `business_name` string: Full legal name of the business being applied for.
  - `business_trade_name` string: Trade name of the business, if different than `business_name.`
  - `business_phone` string: Phone number of the business' primary location.
  - `business_type` 'sole_prop_or_partnership' | 'llc' | 'corporation' | 'nonprofit' | 'government': String indicating the business' type of legal entity.
  - `email` string, email: Email of the customer applying for terms.
  - `personal_name_first` string: First name of the person applying on behalf of the business.
  - `personal_name_last` string: Last name of the person applying on behalf of the business.
  - `personal_phone` string: Personal phone number of the customer representative applying for terms.
  - `amount_approved` integer: Total amount of the credit approved.
  - `amount_authorized` integer: Amount of the credit line reserved for authorized charges.
  - `amount_available` integer: Current amount of the credit line available for purchases.
  - `amount_balance` integer: Current balance on the customer's credit line.
  - `amount_unapplied_payments` integer: Current amount of a customer's unapplied payments.
  - `default_terms` 'net7' | 'net10' | 'net10th' | 'net15' | 'net20' | 'net30' | 'net45' | 'net60' | 'net75' | 'net90' | 'net120' | 'net180' | 'null', nullable: Set default terms that will apply to this customer's invoices. Can be overridden when requesting an advance.
  - `advance_rate` number, double, nullable: The advance rate that will be used to determine the amount advanced for this customer's invoices.
  - `credit_status` 'approved' | 'hold' | 'declined' | 'pending' | 'deactivated' | 'null', nullable: Current credit status of this customer. See <a href="#operation/requestCustomerCreditCheck">#request-a-credit-check</a> for more details.
  - `net_terms_status` 'enrolled' | 'pending_enrollment' | 'enrollment_expired' | 'null', nullable: Current net terms enrollment status of this customer. See <a href="#operation/fetchCustomer">#fetchCustomer</a> for more details.
  - `net_terms_enrollment_url` string, nullable: The URL for a customer to complete enrollment requirements when net_terms_status is pending_enrollment. See <a href="#operation/fetchCustomer">#fetchCustomer</a> for more details.
  - `net_terms_enrollment_expires_at` string, date-time, nullable: The date by which the customer must be enrolled in this net terms offer, not null when net_terms_status is pending_enrollment.
  - `credit_check_requested_at` string, date-time, nullable: The date a credit check was requested.
  - `archived` boolean: Boolean indicating if customer is archived.
  - `duns_number` string, nullable: Dun & Bradstreet unique nine-digit identifier for businesses that is associated with a business's Live Business Identity
  - `credit_decisions` object[]: Array of credit decisions made for this customer.
    - `id` string: Unique identifier for the credit decision.
    - `created_at` string, date-time: Date the credit decision was created.
    - `decision` 'approved' | 'declined' | 'hold' | 'line_adjustment' | 'deactivate': The credit decision outcome.
    - `amount` integer: The credit amount approved.
    - `advance_rate` number, double: The advance rate for this credit decision.
    - `decline_code` 'no_business_found' | 'thin_file' | 'failing_credit' | 'not_approved_need_more_info' | 'sole_prop' | 'applicant_business_association' | 'merchant_risk' | 'fraud' | 'no_us_address' | 'duplicate' | 'test_account' | 'email_verification_freemail' | 'email_verification_domain' | 'address_verification' | 'poor_cash_flow' | 'additional_info_not_provided' | 'other', nullable: Code indicating reason for decline, if applicable.
    - `hold_code` 'past_due' | 'failed_payment' | 'requested_by_customer' | 'requested_by_merchant' | 'dispute' | 'fraud' | 'churned' | 'payment_plan' | 'inactive' | 'other', nullable: Code indicating reason for hold, if applicable.

## Other responses

- `400`: The request body failed validation
- `401`: Unauthorized error
- `403`: Forbidden error
- `404`: Customer not found, or outside the partner's scope
- `409`: Customer has already accepted the Net Terms Agreement
- `422`: Customer cannot be enrolled
- `429`: Rate limit error

---

[API](https://skmtc.dev/resolvepay/apis/resolve-partners-api-reference.md) - [All operations](https://skmtc.dev/resolvepay/apis/resolve-partners-api-reference/llms.txt) - [OpenAPI document](https://skmtc.dev/resolvepay/apis/resolve-partners-api-reference/revisions/5a1c75b8b404?raw)
