Neon One Memberships API
Membership levels, terms, and sub-members held by an account, nested under the account resource - including active-status and primary-active-membership fields added in API v2.11.
Membership levels, terms, and sub-members held by an account, nested under the account resource - including active-status and primary-active-membership fields added in API v2.11.
openapi: 3.0.3
info:
title: Neon CRM API v2
description: >-
Neon CRM API v2 is a RESTful, JSON-based rebuild of Neon One's legacy API
v1, first launched in 2019. It exposes constituent accounts, households,
donations, pledges, recurring donations, campaigns, memberships, events,
custom fields and custom objects, orders and the online store, volunteers,
and webhook subscriptions. All requests use HTTP Basic Authentication with
the organization's Org ID as the username and an API key as the password.
Neon CRM API v1 and its legacy webhook structure are scheduled to be
retired on July 11, 2026; this document covers API v2 only. This is a
representative subset of the full v2 surface, grounded in Neon's public
developer documentation and version release notes (v2.0 - v2.11), not an
exhaustive mirror of every documented endpoint.
version: '2.11'
contact:
name: Neon One Developer Center
url: https://developer.neoncrm.com/
license:
name: Proprietary
url: https://neonone.com/
servers:
- url: https://api.neoncrm.com/v2
description: Production and Sandbox
- url: https://trial.z2systems.com/v2
description: Trial instances
security:
- basicAuth: []
tags:
- name: Accounts
description: Individual and organization constituent records, contacts, and addresses.
- name: Households
description: Grouping of individual accounts into households with relation types.
- name: Donations
description: Donations, pledges, pledge payments, recurring donations, and soft credits.
- name: Campaigns
description: Fundraising campaigns that transactions are attributed to.
- name: Memberships
description: Membership levels and terms held by an account.
- name: Events
description: Events, tickets, and event registrations.
- name: Custom Fields
description: Standard custom fields and the Custom Objects framework.
- name: Orders
description: Orders grouping donations, memberships, and store purchases.
- name: Store
description: Online store products, catalogs, and categories.
- name: Volunteers
description: Volunteers, groups, opportunities, roles, shifts, and time sheets.
- name: Webhooks
description: Outbound webhook subscriptions.
- name: Properties
description: Reference and lookup data used across other resources.
paths:
/accounts:
get:
operationId: listAccounts
tags: [Accounts]
summary: List accounts
description: Retrieves accounts in bulk, functioning similarly to the v1 keyword search. Added in API v2.3.
parameters:
- $ref: '#/components/parameters/CurrentPage'
- $ref: '#/components/parameters/PageSize'
responses:
'200':
description: A page of accounts.
content:
application/json:
schema:
$ref: '#/components/schemas/AccountListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: createAccount
tags: [Accounts]
summary: Create an account
description: Creates a new individual or company account.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AccountInput'
responses:
'200':
description: The created account.
content:
application/json:
schema:
$ref: '#/components/schemas/Account'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
/accounts/{id}:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: getAccount
tags: [Accounts]
summary: Retrieve an account
description: Retrieves an individual or organization account by ID. Returns 222 Merged Account if the account was merged into another.
responses:
'200':
description: The requested account.
content:
application/json:
schema:
$ref: '#/components/schemas/Account'
'222':
description: The account has been merged into another account.
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
put:
operationId: updateAccount
tags: [Accounts]
summary: Update an account
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AccountInput'
responses:
'200':
description: The updated account.
content:
application/json:
schema:
$ref: '#/components/schemas/Account'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/accounts/search:
post:
operationId: searchAccounts
tags: [Accounts]
summary: Search accounts
description: Advanced search over accounts using searchFields and outputFields. Rate-limited to 1 simultaneous request.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SearchRequest'
responses:
'200':
description: Matching accounts.
content:
application/json:
schema:
$ref: '#/components/schemas/AccountListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
/accounts/search/searchFields:
get:
operationId: listAccountSearchFields
tags: [Accounts]
summary: List account search fields
responses:
'200':
description: Fields usable as accounts/search criteria.
content:
application/json:
schema:
type: array
items:
type: object
additionalProperties: true
/accounts/search/outputFields:
get:
operationId: listAccountOutputFields
tags: [Accounts]
summary: List account output fields
responses:
'200':
description: Fields returnable from accounts/search.
content:
application/json:
schema:
type: array
items:
type: object
additionalProperties: true
/accounts/link:
post:
operationId: linkAccounts
tags: [Accounts]
summary: Link two accounts
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: true
responses:
'200':
description: Link result.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
/accounts/unlink:
post:
operationId: unlinkAccounts
tags: [Accounts]
summary: Unlink two previously merged accounts
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: true
responses:
'200':
description: Unlink result.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
/accounts/{id}/contacts:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: listAccountContacts
tags: [Accounts]
summary: List contacts on an organization account
responses:
'200':
description: A list of contacts.
content:
application/json:
schema:
type: object
properties:
contacts:
type: array
items:
$ref: '#/components/schemas/Contact'
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: addAccountContact
tags: [Accounts]
summary: Add a contact to an organization account
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Contact'
responses:
'200':
description: The created contact.
content:
application/json:
schema:
$ref: '#/components/schemas/Contact'
'401':
$ref: '#/components/responses/Unauthorized'
/accounts/{id}/contacts/{contactId}:
parameters:
- $ref: '#/components/parameters/AccountId'
- name: contactId
in: path
required: true
description: The ID of the contact.
schema:
type: string
get:
operationId: getAccountContact
tags: [Accounts]
summary: Retrieve a contact
responses:
'200':
description: The requested contact.
content:
application/json:
schema:
$ref: '#/components/schemas/Contact'
'404':
$ref: '#/components/responses/NotFound'
put:
operationId: updateAccountContact
tags: [Accounts]
summary: Update a contact
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Contact'
responses:
'200':
description: The updated contact.
content:
application/json:
schema:
$ref: '#/components/schemas/Contact'
'404':
$ref: '#/components/responses/NotFound'
patch:
operationId: patchAccountContact
tags: [Accounts]
summary: Partially update a contact
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: true
responses:
'200':
description: The updated contact.
content:
application/json:
schema:
$ref: '#/components/schemas/Contact'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: deleteAccountContact
tags: [Accounts]
summary: Remove a contact from an organization account
responses:
'200':
description: Deletion confirmation.
'404':
$ref: '#/components/responses/NotFound'
/accounts/{id}/donations:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: listAccountDonations
tags: [Accounts]
summary: List an account's donations
responses:
'200':
description: A list of donations for the account.
content:
application/json:
schema:
type: object
properties:
donations:
type: array
items:
$ref: '#/components/schemas/Donation'
'401':
$ref: '#/components/responses/Unauthorized'
/accounts/{id}/pledges:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: listAccountPledges
tags: [Accounts]
summary: List an account's pledges
description: Includes the pledgeStatus (open or closed) field added in API v2.11.
responses:
'200':
description: A list of pledges for the account.
content:
application/json:
schema:
type: object
properties:
pledges:
type: array
items:
$ref: '#/components/schemas/Pledge'
'401':
$ref: '#/components/responses/Unauthorized'
/accounts/{id}/memberships:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: listAccountMemberships
tags: [Memberships]
summary: List an account's memberships
description: Includes isActive and primaryActiveMembership fields added in API v2.11.
responses:
'200':
description: A list of memberships held by the account.
content:
application/json:
schema:
type: object
properties:
memberships:
type: array
items:
$ref: '#/components/schemas/Membership'
'401':
$ref: '#/components/responses/Unauthorized'
/memberships/{memberId}/subMembers:
parameters:
- name: memberId
in: path
required: true
description: The ID of the membership.
schema:
type: string
get:
operationId: listMembershipSubMembers
tags: [Memberships]
summary: List sub-members on a membership
description: Includes the isCurrentEmployee query parameter added in API v2.10.
parameters:
- name: isCurrentEmployee
in: query
required: false
schema:
type: boolean
responses:
'200':
description: A list of sub-members.
content:
application/json:
schema:
type: object
properties:
subMembers:
type: array
items:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
/addresses:
post:
operationId: createAddress
tags: [Accounts]
summary: Add an address to an account
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Address'
responses:
'200':
description: The created address.
content:
application/json:
schema:
$ref: '#/components/schemas/Address'
'401':
$ref: '#/components/responses/Unauthorized'
/addresses/{addressId}:
parameters:
- name: addressId
in: path
required: true
description: The ID of the address.
schema:
type: string
get:
operationId: getAddress
tags: [Accounts]
summary: Retrieve an address
responses:
'200':
description: The requested address.
content:
application/json:
schema:
$ref: '#/components/schemas/Address'
'404':
$ref: '#/components/responses/NotFound'
put:
operationId: updateAddress
tags: [Accounts]
summary: Update an address
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Address'
responses:
'200':
description: The updated address.
content:
application/json:
schema:
$ref: '#/components/schemas/Address'
'404':
$ref: '#/components/responses/NotFound'
patch:
operationId: patchAddress
tags: [Accounts]
summary: Partially update an address
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: true
responses:
'200':
description: The updated address.
content:
application/json:
schema:
$ref: '#/components/schemas/Address'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: deleteAddress
tags: [Accounts]
summary: Remove an address
responses:
'200':
description: Deletion confirmation.
'404':
$ref: '#/components/responses/NotFound'
/households:
post:
operationId: createHousehold
tags: [Households]
summary: Create a household
description: Household endpoints shipped to API v2.10 on June 7, 2025.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/HouseholdInput'
responses:
'200':
description: The created household.
content:
application/json:
schema:
$ref: '#/components/schemas/Household'
'401':
$ref: '#/components/responses/Unauthorized'
/households/{id}:
parameters:
- name: id
in: path
required: true
description: The ID of the household.
schema:
type: string
put:
operationId: updateHousehold
tags: [Households]
summary: Update a household
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/HouseholdInput'
responses:
'200':
description: The updated household.
content:
application/json:
schema:
$ref: '#/components/schemas/Household'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: deleteHousehold
tags: [Households]
summary: Delete a household
responses:
'200':
description: Deletion confirmation.
'404':
$ref: '#/components/responses/NotFound'
/households/listHouseholds:
get:
operationId: listHouseholds
tags: [Households]
summary: List households
responses:
'200':
description: A list of households.
content:
application/json:
schema:
type: object
properties:
households:
type: array
items:
$ref: '#/components/schemas/Household'
'401':
$ref: '#/components/responses/Unauthorized'
/households/listRelationTypes:
get:
operationId: listHouseholdRelationTypes
tags: [Households]
summary: List household relation types
responses:
'200':
description: A list of relation types (e.g. spouse, child, parent).
content:
application/json:
schema:
type: array
items:
type: object
additionalProperties: true
/donations:
post:
operationId: createDonation
tags: [Donations]
summary: Create a donation
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DonationInput'
responses:
'200':
description: The created donation.
content:
application/json:
schema:
$ref: '#/components/schemas/Donation'
'401':
$ref: '#/components/responses/Unauthorized'
/donations/{id}:
parameters:
- name: id
in: path
required: true
description: The ID of the donation.
schema:
type: string
get:
operationId: getDonation
tags: [Donations]
summary: Retrieve a donation
responses:
'200':
description: The requested donation.
content:
application/json:
schema:
$ref: '#/components/schemas/Donation'
'404':
$ref: '#/components/responses/NotFound'
put:
operationId: updateDonation
tags: [Donations]
summary: Update a donation
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DonationInput'
responses:
'200':
description: The updated donation.
content:
application/json:
schema:
$ref: '#/components/schemas/Donation'
'404':
$ref: '#/components/responses/NotFound'
patch:
operationId: patchDonation
tags: [Donations]
summary: Partially update a donation
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: true
responses:
'200':
description: The updated donation.
content:
application/json:
schema:
$ref: '#/components/schemas/Donation'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: deleteDonation
tags: [Donations]
summary: Delete a donation
responses:
'200':
description: Deletion confirmation.
'404':
$ref: '#/components/responses/NotFound'
/donations/search:
post:
operationId: searchDonations
tags: [Donations]
summary: Search donations
description: Rate-limited to 1 simultaneous request.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SearchRequest'
responses:
'200':
description: Matching donations.
content:
application/json:
schema:
type: object
properties:
searchResults:
type: array
items:
type: object
additionalProperties: true
'429':
$ref: '#/components/responses/TooManyRequests'
/pledges:
post:
operationId: createPledge
tags: [Donations]
summary: Create a pledge
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PledgeInput'
responses:
'200':
description: The created pledge.
content:
application/json:
schema:
$ref: '#/components/schemas/Pledge'
'401':
$ref: '#/components/responses/Unauthorized'
/pledges/{id}:
parameters:
- name: id
in: path
required: true
description: The ID of the pledge.
schema:
type: string
get:
operationId: getPledge
tags: [Donations]
summary: Retrieve a pledge
responses:
'200':
description: The requested pledge.
content:
application/json:
schema:
$ref: '#/components/schemas/Pledge'
'404':
$ref: '#/components/responses/NotFound'
put:
operationId: updatePledge
tags: [Donations]
summary: Update a pledge
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PledgeInput'
responses:
'200':
description: The updated pledge.
content:
application/json:
schema:
$ref: '#/components/schemas/Pledge'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: deletePledge
tags: [Donations]
summary: Delete a pledge
responses:
'200':
description: Deletion confirmation.
'404':
$ref: '#/components/responses/NotFound'
/pledges/{id}/pledgePayments:
parameters:
- name: id
in: path
required: true
description: The ID of the pledge.
schema:
type: string
get:
operationId: listPledgePayments
tags: [Donations]
summary: List payments made against a pledge
responses:
'200':
description: A list of pledge payments.
content:
application/json:
schema:
type: object
properties:
pledgePayments:
type: array
items:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: createPledgePayment
tags: [Donations]
summary: Create a payment against a pledge
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: true
responses:
'200':
description: The created pledge payment.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
/pledges/{id}/pledgePayments/{paymentId}:
parameters:
- name: id
in: path
required: true
description: The ID of the pledge.
schema:
type: string
- name: paymentId
in: path
required: true
description: The ID of the pledge payment.
schema:
type: string
get:
operationId: getPledgePayment
tags: [Donations]
summary: Retrieve a pledge payment
responses:
'200':
description: The requested pledge payment.
content:
application/json:
schema:
type: object
additionalProperties: true
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: deletePledgePayment
tags: [Donations]
summary: Delete a pledge payment
responses:
'200':
description: Deletion confirmation.
'404':
$ref: '#/components/responses/NotFound'
/pledges/{pledgeId}/installments:
parameters:
- name: pledgeId
in: path
required: true
description: The ID of the pledge.
schema:
type: string
post:
operationId: createPledgeInstallment
tags: [Donations]
summary: Create a pledge installment
description: Added in API v2.3.
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: true
responses:
'200':
description: The created installment.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
/pledges/{pledgeId}/installments/{id}:
parameters:
- name: pledgeId
in: path
required: true
description: The ID of the pledge.
schema:
type: string
- name: id
in: path
required: true
description: The ID of the installment.
schema:
type: string
get:
operationId: getPledgeInstallment
tags: [Donations]
summary: Retrieve a pledge installment
responses:
'200':
description: The requested installment.
content:
application/json:
schema:
type: object
additionalProperties: true
'404':
$ref: '#/components/responses/NotFound'
put:
operationId: updatePledgeInstallment
tags: [Donations]
summary: Update a pledge installment
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: true
responses:
'200':
description: The updated installment.
content:
application/json:
schema:
type: object
additionalProperties: true
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: deletePledgeInstallment
tags: [Donations]
summary: Delete a pledge installment
responses:
'200':
description: Deletion confirmation.
'404':
$ref: '#/components/responses/NotFound'
/recurring:
get:
operationId: listRecurringDonations
tags: [Donations]
summary: List recurring donation schedules
responses:
'200':
description: A list of recurring donations.
content:
application/json:
schema:
type: object
properties:
recurringDonations:
type: array
items:
$ref: '#/components/schemas/RecurringDonation'
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: createRecurringDonation
tags: [Donations]
summary: Create a recurring donation schedule
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RecurringDonation'
responses:
'200':
description: The created recurring donation.
content:
application/json:
schema:
$ref: '#/components/schemas/RecurringDonation'
'401':
$ref: '#/components/responses/Unauthorized'
/recurring/{id}:
parameters:
- name: id
in: path
required: true
description: The ID of the recurring donation.
schema:
type: string
get:
operationId: getRecurringDonation
tags: [Donations]
summary: Retrieve a recurring donation schedule
responses:
'200':
description: The requested recurring donation.
content:
application/json:
schema:
$ref: '#/components/schemas/RecurringDonation'
'404':
$ref: '#/components/responses/NotFound'
put:
operationId: updateRecurringDonation
tags: [Donations]
summary: Update a recurring donation schedule
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RecurringDonation'
responses:
'200':
description: The updated recurring donation.
content:
application/json:
schema:
$ref: '#/components/schemas/RecurringDonation'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: deleteRecurringDonation
tags: [Donations]
summary: Cancel/delete a recurring donation schedule
responses:
'200':
description: Deletion confirmation.
'404':
$ref: '#/components/responses/NotFound'
/softCredits:
get:
operationId: listSoftCredits
tags: [Donations]
summary: List soft credits
description: Added in API v2.3.
responses:
'200':
description: A list of soft credits.
content:
application/json:
schema:
type: object
properties:
softCredits:
type: array
items:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: createSoftCredit
tags: [Donations]
summary: Create a soft credit
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: true
responses:
'200':
description: The created soft credit.
content:
application/json:
schema:
type: object
additionalProperties: true
'401'
# --- truncated at 32 KB (89 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/neonone/refs/heads/main/openapi/neonone-openapi.yml