Skip to content

Backer gifting API

The API for sending money to a 529

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.

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" } }
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" } }

Use cases

What you can build

  • 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

The flow

How a gift moves

  1. Create a customer

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

  2. 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.

  3. Quote the fees

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

  4. Create the contribution

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

  5. 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>
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>

Coverage

One integration, 68 plans

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

  • 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

Reference

Endpoints

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

Events

Webhooks

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

  • 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" } } }
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.

Testing

Sandbox and 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.

For agents

Built 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.

Trust

Security and compliance

  • 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.

faq

Questions? We’ve got answers.

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.

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.

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.

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.

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.

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.

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

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

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.

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.