# The API for sending money to a 529

Backer gifting API

One integration reaches 68 of the 95 giftable 529 plans. Collect a card or bank payment, route it to the beneficiary's plan, and get a webhook when it settles.

[Request access](mailto:partnerships@backer.com) · [Read the reference](#reference)

A gift, in four calls

```
POST /v2/oauth/token
{ "grantType": "client_credentials",
  "clientId": "…", "clientSecret": "…" }
→ { "accessToken": "…", "expiresIn": 3600 }

GET /v2/contribution-fees
    ?accountId=…&customerId=…&paymentMethodType=card
    &amountInCents=2500&platformFeeInCents=199
→ { "processingFeeInCents": 75,
    "platformFeeInCents": 199, "totalAmountInCents": 2774 }

POST /v2/contributions
{ "accountId": "…", "amountInCents": 2500,
  "platformFeeInCents": 199,
  "clientContributionId": "gift_8f2c",
  "funding": { "type": "customer",
               "customerId": "…", "paymentMethodId": "…" } }
→ { "transactionId": "ebb7d76d-…", "status": "processing", … }

WEBHOOK transaction.settled
{ "type": "transaction.settled", "resourceType": "transaction",
  "resourceId": "ebb7d76d-…",
  "data": { "accountId": "…", "status": "settled" } }
```

## What you can build

Use cases

### Gifting inside your product

A registry, a wallet, or a brokerage app lets a giver fund a child's 529 without leaving.

### Link an existing 529

Validate an account number against the plan or the broker that holds it, then contribute to it.

### Integrated enrollment

Open a new 529 account in your flow on Backer-hosted pages and get the outcome by webhook.

Available to approved partners

## How a gift moves

The flow

### Create a customer

One `POST /v2/customers` per giver, keyed by your own `clientCustomerId`.

### Collect a payment method on a hosted page

The page is Backer-hosted, so card data and bank credentials never touch your servers. Bank accounts verify instantly through Plaid.

### Quote the fees

`GET /v2/contribution-fees` returns the processing fee, your platform fee, and the total the giver will be charged.

### Create the contribution

`POST /v2/contributions` with your own `clientContributionId`. A duplicate id returns 409, so a retry can never charge twice.

### Backer settles it to the plan

Funds are collected and dispatched to the 529 plan, and `transaction.settled` arrives at your webhook.

A contribution can be canceled within one hour of creation. Card refunds and ACH returns come back as webhooks.

Customer and hosted payment page

```
POST /v2/customers
{ "clientCustomerId": "usr_31ab", "firstName": "Maya",
  "lastName": "Lee", "email": "maya@example.com" }
→ { "customerId": "7579429d-…",
    "clientCustomerId": "usr_31ab", … }

POST /v2/customers/7579429d-…/add-payment-method-sessions
{ "successUrl": "https://yourapp.com/success",
  "cancelUrl": "https://yourapp.com/cancel",
  "type": "card", "platformFeeInCents": 199,
  "metadata": "<base64>" }
→ { "url": "https://backer.com/white-label
            /add-payment-method?token=…" }

# the giver returns to successUrl with the saved method
?paymentMethodId=3611f5f2-…&metadata=<base64>
```

## One integration, 68 plans

Coverage

The plans a gift can reach today, by state. Coverage has more than doubled in the last six months; ask us about a plan you need.

### 68

529 plans a gift can reach today

### 72%

of the 95 giftable 529 plans

### 41

states, plus the District of Columbia

### Covered plans

| Covered plans | Plan |
| --- | --- |
| Alaska | T. Rowe Price 529 |
| Arizona | AZ529, Arizona's Education Savings Plan, Fidelity |
| Arizona | The Goldman Sachs 529 Plan |
| Arkansas | Arkansas Brighter Future Advisor Plan |
| Arkansas | Arkansas Brighter Future Direct Plan |
| California | ScholarShare 529 |
| Colorado | CollegeInvest Direct Portfolio College Savings Plan |
| Colorado | Scholars Choice Education Savings Plan |
| Colorado | Smart Choice College Savings Plan |
| Colorado | Stable Value Plus College Savings Plan |
| Connecticut | CHET Advisor 529 Plan |
| Connecticut | Connecticut Higher Education Trust (CHET) |
| Delaware | DE529 Education Savings Plan |
| Florida | Florida Investment 529 Plan |
| Florida | Florida Prepaid 529 Plan |
| Georgia | Path2College 529 Plan |
| Hawaii | HI529 – Hawaii's College Savings Program |
| Idaho | IDeal – Idaho Education Savings Program |
| Indiana | Indiana529 Advisor Savings Plan |
| Indiana | Indiana529 Direct Savings Plan |
| Iowa | ISave 529 |
| Kansas | Quest529 Education Savings Plan |
| Kansas | Schwab 529 Education Savings Plan |
| Kentucky | KY Saves 529 |
| Maine | NextGen 529 -- Client Connect Series |
| Massachusetts | U.Fund College Investing Plan |
| Michigan | MI 529 Advisor Plan |
| Michigan | Michigan Education Savings Program (MESP) |
| Minnesota | Minnesota College Savings Plan |
| Missouri | MOST - Missouri's 529 Education Plan (Direct-sold) |
| Montana | Achieve Montana |
| Nebraska | Bloomwell 529 Education Savings Plan |
| Nebraska | NEST Advisor College Savings Plan |
| Nebraska | NEST Direct College Savings Plan |
| Nevada | Future Path 529 Plan |
| Nevada | The Vanguard 529 College Savings Plan |
| Nevada | Victory Capital 529 Education Savings Plan |
| New Hampshire | Fidelity Advisor 529 Plan |
| New Hampshire | UNIQUE College Investing Plan |
| New Jersey | Franklin Templeton 529 College Savings Plan |
| New Jersey | NJBEST 529 College Savings Plan |
| New Mexico | Scholar's Edge |
| New Mexico | The Education Plan |
| New York | New York's 529 Advisor-Guided College Savings Program |
| New York | New York's 529 College Savings Program -- Direct Plan |
| North Carolina | North Carolina's National College Savings Program |
| North Dakota | College SAVE (Advisor) |
| North Dakota | College SAVE (Direct) |
| Ohio | Ohio’s 529 Plan, CollegeAdvantage |
| Oklahoma | Oklahoma 529 |
| Oklahoma | Oklahoma Dream 529 Plan |
| Oregon | Embark |
| Oregon | MFS 529 Savings Plan |
| Pennsylvania | PA 529 Guaranteed Savings Plan |
| Pennsylvania | PA 529 Investment Plan |
| Rhode Island | CollegeBound 529 (Advisor-Sold) |
| Rhode Island | CollegeBound Saver (Direct-Sold) |
| Tennessee | TNStars College Savings 529 Program |
| Texas | LoneStar 529 Plan |
| Texas | Texas College Savings Plan |
| Utah | my529 |
| Vermont | VT529 |
| Virginia | Invest529 |
| Washington DC | DC College Savings Plan |
| West Virginia | SMART529 Select |
| West Virginia | SMART529 WV Direct College Savings Plan |
| West Virginia | The Hartford SMART529 |
| Wisconsin | Edvest 529 |

## Endpoints

Reference

Plain HTTPS and JSON with camelCase keys, version 2026-07-27.

Base URL

`https://backer.com/restapi/v2`

Sandbox

Provisioned with your credentials

Authentication

OAuth2 client credentials; bearer tokens expire after `expiresIn` seconds (3,600 in the sandbox example)

Rate limit

300 requests per minute per partner with burst allowance of 20 requests per second

The full OpenAPI 3.1 document comes with access.

### Authentication

| Method | Path | Summary |
| --- | --- | --- |
| POST | `/v2/oauth/token` | Exchange credentials for a bearer access token |

### Customers

| Method | Path | Summary |
| --- | --- | --- |
| POST | `/v2/customers` | Register a customer with Backer |
| GET | `/v2/customers` | Get a customer by clientCustomerId |
| GET | `/v2/customers/{customerId}` | Get a customer by Backer customer id |
| POST | `/v2/customers/{customerId}` | Update a customer's details |
| POST | `/v2/customers/{customerId}/status` | Activate, deactivate, or put a customer on hold |

### Payment methods

| Method | Path | Summary |
| --- | --- | --- |
| POST | `/v2/customers/{customerId}/add-payment-method-sessions` | Create a signed URL to the hosted payment-method page |
| GET | `/v2/customers/{customerId}/payment-methods` | List saved payment methods for a customer |
| GET | `/v2/customers/{customerId}/payment-methods/{paymentMethodId}` | Get a saved payment method by id |
| DELETE | `/v2/customers/{customerId}/payment-methods/{paymentMethodId}` | Delete a saved payment method |

### Plans and brokers

| Method | Path | Summary |
| --- | --- | --- |
| GET | `/v2/plans` | List 529 plans |
| GET | `/v2/brokers` | List brokerage partners |

### Accounts

| Method | Path | Summary |
| --- | --- | --- |
| POST | `/v2/customers/{customerId}/validate-account-number` | Validate a 529 account number |
| POST | `/v2/customers/{customerId}/link-account` | Create an account backed by an existing 529 account |
| GET | `/v2/accounts/{accountId}/details` | Get a linked 529 account by id |
| POST | `/v2/accounts/{accountId}` | Update linked 529 account details |
| POST | `/v2/accounts/{accountId}/status` | Activate or deactivate a linked 529 account |
| GET | `/v2/contribution-limits` | Get 529 contribution limits for a linked account |

### Contributions and transactions

| Method | Path | Summary |
| --- | --- | --- |
| GET | `/v2/contribution-fees` | Quote fees for a prospective contribution |
| POST | `/v2/contributions` | Submit a contribution |
| GET | `/v2/transactions/{transactionId}` | Get a transaction by id |
| GET | `/v2/transactions` | Get a transaction by clientContributionId |
| GET | `/v2/accounts/{accountId}/transactions` | List transactions for an account |
| POST | `/v2/transactions/{transactionId}/cancel` | Cancel a contribution transaction |

### Webhooks

| Method | Path | Summary |
| --- | --- | --- |
| POST | `/v2/webhook-subscription` | Update the partner's webhook subscription |

### Enrollment

Documented for approved partners

## Webhooks

Events

Backer posts an event to your endpoint when a contribution settles, fails, or is refunded. Every delivery is signed.

| Event | Summary |
| --- | --- |
| `transaction.settled` | Contribution settled to the 529 plan |
| `transaction.failed` | Contribution failed |
| `transaction.refund_initiated` | Refund initiated for a contribution |
| `transaction.refunded` | Refund settled for a contribution |
| `transaction.refund_failed` | Refund failed for a contribution |

`enrollment.completed` and `enrollment.failed` are documented for approved partners.

Two deliveries

```
WEBHOOK transaction.settled
{ "id": "eb6b75db-…", "type": "transaction.settled",
  "createdAt": "2026-05-13T22:57:58Z",
  "resourceType": "transaction", "resourceId": "f98e1ce6-…",
  "data": { "accountId": "78198e5c-…", "status": "settled" } }

WEBHOOK transaction.failed
{ "id": "6f6f063e-…", "type": "transaction.failed",
  "createdAt": "2026-05-14T21:56:06Z",
  "resourceType": "transaction", "resourceId": "b76699b6-…",
  "data": { "accountId": "f2c690b0-…", "status": "failed",
    "failureDetails": { "phase": "funding",
      "category": "funding_ach_failure",
      "code": "other_ach_return",
      "failedAt": "2026-05-14T21:56:06Z",
      "message": "Payment failed" } } }
```

### Verifying a delivery

Every delivery carries a `Webhook-Signature` header of the form `t=<unix timestamp>, v1=<signature>`, where the signature is the hex HMAC-SHA256 of `<timestamp>.<raw request body>` keyed with your subscription secret. Reject a delivery whose timestamp is more than five minutes old, compare signatures in constant time, and use the `Webhook-Id` header to deduplicate: deliveries are retried with exponential backoff, up to 20 attempts.

### Subscribing

Set the destination URL, the event list, and the signing secret with `POST /v2/webhook-subscription`. One subscription per partner; every environment gets its own credentials, so the sandbox can point at a staging endpoint.

## Sandbox and testing

Testing

### A sandbox comes with access

The sandbox speaks the same API and returns the same shapes; credentials and its base URL are provisioned when access is granted.

### Force an outcome

On a sandbox contribution, an `X-Backer-Simulate` header forces the result. It takes `settled`, `card_declined`, `ach_insufficient_funds`, `invalid_account_number`, `plan_not_available`, `refund_succeeded`, `refund_card_expired`, or `refund_account_closed`.

### Hosted page timing

A payment-method session URL must be opened within 10 minutes. Once on the page, the giver has 30 minutes; after that they are sent to your cancel URL.

## Built for agents

For agents

### Every page has a markdown twin

This page is also served as plain markdown at `/developers.md`, and every page links its twin with `rel="alternate"`.

### The reference is complete

Every public endpoint, its summary, and the webhook events are on this page and in its markdown twin.

### /llms.txt indexes it all

An index of the site for assistants and crawlers, with the full text of every page in one file at `/llms-full.txt`.

One line for an agent

```
Read https://backer.com/developers.md, then request access at partnerships@backer.com.
```

## Security and compliance

Trust

### Hosted pages

Card data and bank credentials are entered on Backer-hosted pages, so they stay out of your systems. You hold a paymentMethodId, never the details behind it.

### Money movement

A contribution can be canceled within one hour of creation: an ACH pull is stopped before it runs, and a card charge is refunded. Refunds and returns report back as webhooks, so your records never drift from ours.

### Who you are integrating with

Backer is the tradename of Principly, Inc., an SEC-registered investment adviser and technology/administrative-services provider. Backer is not a broker-dealer, municipal advisor, or fiduciary to any plan. The API and the Backer-hosted gifting pages process contributions; they do not provide investment advice.

## Questions? We’ve got answers.

faq

### How do I send money to a 529 plan programmatically?

Through Backer’s gifting API: create a customer, collect a payment method on a Backer-hosted page, quote the fees, then create a contribution against the beneficiary’s account. Backer routes the funds to the plan and sends a webhook when the contribution settles.

### Which 529 plans does the Backer API support?

68 of the 95 giftable 529 plans today, listed above by state. Coverage has more than doubled in the last six months and grows monthly; ask us about a plan you need.

### Can I get an API key today?

Not self-serve. Tell us what you are building and we provision a sandbox and credentials; production access follows a short review, because Backer processes contributions on your users’ behalf.

### What does it cost?

Fees are quoted per contribution before it is created: a processing fee that depends on the payment method, plus the platform fee you set with platformFeeInCents (the consumer site’s default is $1.99 per gift). Partner pricing is scoped to each program.

### Which payment methods work?

Cards, digital wallets, and ACH bank transfers, collected on Backer-hosted pages so card data and bank credentials never touch your systems. Limits differ by method and are returned by GET /v2/contribution-limits.

### Can a gift be canceled?

Within one hour of creation, through POST /v2/transactions/{transactionId}/cancel. An ACH pull is stopped; a card payment is refunded, and the refund reports back as webhooks.

### Does Backer store card numbers on my behalf?

Payment methods are tokenized and stored by Backer’s payment processor; you reference them by paymentMethodId and never see the details behind it.

### Can my users open a new 529 account inside my product?

Yes, for approved partners: Backer’s integrated enrollment runs on hosted pages and reports back with webhooks. Ask us.

### Is there an SDK, a CLI, or an MCP server?

Not yet. The API is plain HTTPS and JSON, the OpenAPI spec comes with access, and every page here has a markdown twin, so agents and code generators work from it directly.

### Who is behind the API?

Backer is the tradename of Principly, Inc., an SEC-registered investment adviser and technology/administrative-services provider. Backer is not a broker-dealer, municipal advisor, or fiduciary to any plan.

## We back what matters most

One home for the whole village behind a kid – parents, grandparents, godparents, friends.

[Request access](mailto:partnerships@backer.com)

---

_Site-wide footer copy and disclosure, shown on every page:_

The connected information, discovery, and infrastructure company for family investing.

Backer is the tradename of Principly, Inc., an SEC-registered investment adviser. Our internet-based investment advisory services are designed to assist clients in saving for education and are not intended to provide comprehensive tax advice or financial planning. Our services are available to U.S. residents only. This website shall not be considered a solicitation or offering for any service or product to any person in any jurisdiction where such solicitation or offer would be unlawful. Investing in securities involves risks, and investing in 529 plans in particular involves certain tax considerations and related risks. Any investments you make in a 529 plan through Backer may lose value. Historical returns, expected returns, and probability projections are provided for informational and illustrative purposes, and may not reflect actual future performance. Our savings calculator is a hypothetical tool provided for illustrative purposes only and is based on important assumptions [described here](/legal/#disclosures). SavingForCollege.com and TrumpAccounts.com are independent publishing properties of Saving for College, LLC and do not provide investment advice.

© 2026 Principly, Inc.
