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': $ref: '#/components/responses/Unauthorized' /softCredits/{id}: parameters: - name: id in: path required: true description: The ID of the soft credit. schema: type: string get: operationId: getSoftCredit tags: [Donations] summary: Retrieve a soft credit responses: '200': description: The requested soft credit. content: application/json: schema: type: object additionalProperties: true '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteSoftCredit tags: [Donations] summary: Delete a soft credit responses: '200': description: Deletion confirmation. '404': $ref: '#/components/responses/NotFound' /campaigns: get: operationId: listCampaigns tags: [Campaigns] summary: List campaigns responses: '200': description: A list of campaigns. content: application/json: schema: type: object properties: campaigns: type: array items: $ref: '#/components/schemas/Campaign' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createCampaign tags: [Campaigns] summary: Create a campaign requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Campaign' responses: '200': description: The created campaign. content: application/json: schema: $ref: '#/components/schemas/Campaign' '401': $ref: '#/components/responses/Unauthorized' /campaigns/{id}: parameters: - name: id in: path required: true description: The ID of the campaign. schema: type: string get: operationId: getCampaign tags: [Campaigns] summary: Retrieve a campaign responses: '200': description: The requested campaign. content: application/json: schema: $ref: '#/components/schemas/Campaign' '404': $ref: '#/components/responses/NotFound' put: operationId: updateCampaign tags: [Campaigns] summary: Update a campaign description: >- The socialFundraising.enabled field must be explicitly set to true when updating a campaign via API v2, or peer-to-peer fundraising support will be disabled in the UI (fixed default behavior noted in API v2.2 release notes). requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Campaign' responses: '200': description: The updated campaign. content: application/json: schema: $ref: '#/components/schemas/Campaign' '404': $ref: '#/components/responses/NotFound' patch: operationId: patchCampaign tags: [Campaigns] summary: Partially update a campaign requestBody: required: true content: application/json: schema: type: object additionalProperties: true responses: '200': description: The updated campaign. content: application/json: schema: $ref: '#/components/schemas/Campaign' '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteCampaign tags: [Campaigns] summary: Delete a campaign responses: '200': description: Deletion confirmation. '404': $ref: '#/components/responses/NotFound' /events: post: operationId: createEvent tags: [Events] summary: Create an event requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EventInput' responses: '200': description: The created event. content: application/json: schema: $ref: '#/components/schemas/Event' '401': $ref: '#/components/responses/Unauthorized' /events/{id}: parameters: - name: id in: path required: true description: The ID of the event. schema: type: string get: operationId: getEvent tags: [Events] summary: Retrieve an event description: Supports a delimited list of multiple event categories as of API v2.11. responses: '200': description: The requested event. content: application/json: schema: $ref: '#/components/schemas/Event' '404': $ref: '#/components/responses/NotFound' put: operationId: updateEvent tags: [Events] summary: Update an event requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EventInput' responses: '200': description: The updated event. content: application/json: schema: $ref: '#/components/schemas/Event' '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteEvent tags: [Events] summary: Delete an event responses: '200': description: Deletion confirmation. '404': $ref: '#/components/responses/NotFound' /events/search: post: operationId: searchEvents tags: [Events] summary: Search events description: Rate-limited to 1 simultaneous request. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SearchRequest' responses: '200': description: Matching events. content: application/json: schema: type: object properties: searchResults: type: array items: type: object additionalProperties: true '429': $ref: '#/components/responses/TooManyRequests' /events/{id}/tickets: parameters: - name: id in: path required: true description: The ID of the event. schema: type: string get: operationId: listEventTickets tags: [Events] summary: List an event's tickets responses: '200': description: A list of event tickets. content: application/json: schema: type: object properties: tickets: type: array items: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' post: operationId: createEventTicket tags: [Events] summary: Create an event ticket type requestBody: required: true content: application/json: schema: type: object additionalProperties: true responses: '200': description: The created ticket. content: application/json: schema: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /events/{id}/tickets/{ticketId}: parameters: - name: id in: path required: true description: The ID of the event. schema: type: string - name: ticketId in: path required: true description: The ID of the ticket. schema: type: string get: operationId: getEventTicket tags: [Events] summary: Retrieve an event ticket type responses: '200': description: The requested ticket. content: application/json: schema: type: object additionalProperties: true '404': $ref: '#/components/responses/NotFound' put: operationId: updateEventTicket tags: [Events] summary: Update an event ticket type requestBody: required: true content: application/json: schema: type: object additionalProperties: true responses: '200': description: The updated ticket. content: application/json: schema: type: object additionalProperties: true '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteEventTicket tags: [Events] summary: Delete an event ticket type responses: '200': description: Deletion confirmation. '404': $ref: '#/components/responses/NotFound' /events/{id}/attendees: parameters: - name: id in: path required: true description: The ID of the event. schema: type: string get: operationId: listEventAttendees tags: [Events] summary: List an event's attendees description: >- Attendee fields expanded in API v2.9 to include prefix, email, companyName, address, city, stateProvince, zipCode, phone1, phone1Type, dob, eventName, registrationId, and ticketName. responses: '200': description: A list of event attendees. content: application/json: schema: type: object properties: attendees: type: array items: $ref: '#/components/schemas/EventAttendee' '401': $ref: '#/components/responses/Unauthorized' /events/{id}/eventRegistrations: parameters: - name: id in: path required: true description: The ID of the event. schema: type: string get: operationId: listEventRegistrationsForEvent tags: [Events] summary: List registrations for an event responses: '200': description: A list of registrations. content: application/json: schema: type: object properties: eventRegistrations: type: array items: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /eventRegistrations: post: operationId: createEventRegistration tags: [Events] summary: Create an event registration requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EventRegistrationInput' responses: '200': description: The created registration. content: application/json: schema: $ref: '#/components/schemas/EventRegistration' '401': $ref: '#/components/responses/Unauthorized' /eventRegistrations/{registrationId}: parameters: - name: registrationId in: path required: true description: The ID of the event registration. schema: type: string get: operationId: getEventRegistration tags: [Events] summary: Retrieve an event registration responses: '200': description: The requested registration. content: application/json: schema: $ref: '#/components/schemas/EventRegistration' '404': $ref: '#/components/responses/NotFound' put: operationId: updateEventRegistration tags: [Events] summary: Update an event registration requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EventRegistrationInput' responses: '200': description: The updated registration. content: application/json: schema: $ref: '#/components/schemas/EventRegistration' '404': $ref: '#/components/responses/NotFound' patch: operationId: patchEventRegistration tags: [Events] summary: Partially update an event registration requestBody: required: true content: application/json: schema: type: object additionalProperties: true responses: '200': description: The updated registration. content: application/json: schema: $ref: '#/components/schemas/EventRegistration' '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteEventRegistration tags: [Events] summary: Delete an event registration responses: '200': description: Deletion confirmation. '404': $ref: '#/components/responses/NotFound' /eventRegistrations/calculate: post: operationId: calculateEventRegistration tags: [Events] summary: Calculate the price of a prospective event registration requestBody: required: true content: application/json: schema: type: object additionalProperties: true responses: '200': description: The calculated registration total. content: application/json: schema: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /customFields: get: operationId: listCustomFields tags: [Custom Fields] summary: List standard custom fields description: Schema updated in API v2.10 with displayName and validated data types. parameters: - name: isEventSpecificField in: query required: false schema: type: boolean - name: attendeeQuestion in: query required: false schema: type: boolean responses: '200': description: A list of custom fields. content: application/json: schema: type: array items: $ref: '#/components/schemas/CustomField' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createCustomField tags: [Custom Fields] summary: Create a standard custom field requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CustomField' responses: '200': description: The created custom field. content: application/json: schema: $ref: '#/components/schemas/CustomField' '401': $ref: '#/components/responses/Unauthorized' /customFields/{id}: parameters: - name: id in: path required: true description: The ID of the custom field. schema: type: string get: operationId: getCustomField tags: [Custom Fields] summary: Retrieve a standard custom field responses: '200': description: The requested custom field. content: application/json: schema: $ref: '#/components/schemas/CustomField' '404': $ref: '#/components/responses/NotFound' put: operationId: updateCustomField tags: [Custom Fields] summary: Update a standard custom field description: Omitting an existing option from the request removes it (fixed in API v2.10). requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CustomField' responses: '200': description: The updated custom field. content: application/json: schema: $ref: '#/components/schemas/CustomField' '404': $ref: '#/components/responses/NotFound' /customObjects: get: operationId: listCustomObjects tags: [Custom Fields] summary: List custom objects description: Custom Objects framework shipped to API v2.10 on April 12, 2025. responses: '200': description: A list of custom objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/CustomObject' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createCustomObject tags: [Custom Fields] summary: Create a custom object requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CustomObject' responses: '200': description: The created custom object. content: application/json: schema: $ref: '#/components/schemas/CustomObject' '401': $ref: '#/components/responses/Unauthorized' /customObjects/{idOrApiAlias}: parameters: - $ref: '#/components/parameters/CustomObjectIdOrApiAlias' get: operationId: getCustomObject tags: [Custom Fields] summary: Retrieve a custom object responses: '200': description: The requested custom object. content: application/json: schema: $ref: '#/components/schemas/CustomObject' '404': $ref: '#/components/responses/NotFound' put: operationId: updateCustomObject tags: [Custom Fields] summary: Update a custom object requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CustomObject' responses: '200': description: The updated custom object. content: application/json: schema: $ref: '#/components/schemas/CustomObject' '404': $ref: '#/components/responses/NotFound' patch: operationId: patchCustomObject tags: [Custom Fields] summary: Partially update a custom object requestBody: required: true content: application/json: schema: type: object additionalProperties: true responses: '200': description: The updated custom object. content: application/json: schema: $ref: '#/components/schemas/CustomObject' '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteCustomObject tags: [Custom Fields] summary: Delete a custom object responses: '200': description: Deletion confirmation. '404': $ref: '#/components/responses/NotFound' /customObjects/{idOrApiAlias}/fields: parameters: - $ref: '#/components/parameters/CustomObjectIdOrApiAlias' get: operationId: listCustomObjectFields tags: [Custom Fields] summary: List fields on a custom object responses: '200': description: A list of custom object fields. content: application/json: schema: type: array items: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' post: operationId: createCustomObjectField tags: [Custom Fields] summary: Create a field on a custom object requestBody: required: true content: application/json: schema: type: object additionalProperties: true responses: '200': description: The created field. content: application/json: schema: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /customObjects/{idOrApiAlias}/records: parameters: - $ref: '#/components/parameters/CustomObjectIdOrApiAlias' get: operationId: listCustomObjectRecords tags: [Custom Fields] summary: List records of a custom object responses: '200': description: A list of custom object records. content: application/json: schema: type: array items: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' post: operationId: createCustomObjectRecord tags: [Custom Fields] summary: Create a record of a custom object requestBody: required: true content: application/json: schema: type: object additionalProperties: true responses: '200': description: The created record. content: application/json: schema: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /customObjects/{idOrApiAlias}/records/{id}: parameters: - $ref: '#/components/parameters/CustomObjectIdOrApiAlias' - name: id in: path required: true description: The ID of the record. schema: type: string get: operationId: getCustomObjectRecord tags: [Custom Fields] summary: Retrieve a record of a custom object responses: '200': description: The requested record. content: application/json: schema: type: object additionalProperties: true '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteCustomObjectRecord tags: [Custom Fields] summary: Delete a record of a custom object responses: '200': description: Deletion confirmation. '404': $ref: '#/components/responses/NotFound' /customObjects/masterDetailObjects: get: operationId: listMasterDetailObjects tags: [Custom Fields] summary: List master/detail custom objects responses: '200': description: A list of master/detail custom objects. content: application/json: schema: type: array items: type: object additionalProperties: true /customObjects/lookUpObjects: get: operationId: listLookUpObjects tags: [Custom Fields] summary: List lookup custom objects responses: '200': description: A list of lookup custom objects. content: application/json: schema: type: array items: type: object additionalProperties: true /orders: post: operationId: createOrder tags: [Orders] summary: Create an order description: >- Orders group multiple donations, memberships, and store purchases in a single transaction. Introduced in API v2.1. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/OrderInput' responses: '200': description: The created order. content: application/json: schema: $ref: '#/components/schemas/Order' '401': $ref: '#/components/responses/Unauthorized' /orders/{id}: parameters: - name: id in: path required: true description: The ID of the order. schema: type: string get: operationId: getOrder tags: [Orders] summary: Retrieve an order responses: '200': description: The requested order. content: application/json: schema: $ref: '#/components/schemas/Order' '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteOrder tags: [Orders] summary: Delete an order responses: '200': description: Deletion confirmation. '404': $ref: '#/components/responses/NotFound' /orders/calculate: post: operationId: calculateOrder tags: [Orders] summary: Calculate the total of a prospective order requestBody: required: true content: application/json: schema: type: object additionalProperties: true responses: '200': description: The calculated order total. content: application/json: schema: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /orders/search: post: operationId: searchOrders tags: [Orders] summary: Search orders description: Rate-limited to 1 simultaneous request. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SearchRequest' responses: '200': description: Matching orders. content: application/json: schema: type: object properties: searchResults: type: array items: type: object additionalProperties: true '429': $ref: '#/components/responses/TooManyRequests' /orders/shippingMethods: post: operationId: listShippingMethods tags: [Orders] summary: List available shipping methods for an order requestBody: required: true content: application/json: schema: type: object additionalProperties: true responses: '200': description: A list of shipping methods. content: application/json: schema: type: array items: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /orders/{orderId}/payments: parameters: - name: orderId in: path required: true description: The ID of the order. schema: type: string post: operationId: createOrderPayment tags: [Orders] summary: Add a payment to an order (checkout) requestBody: required: true content: application/json: schema: type: object additionalProperties: true responses: '200': description: The created payment. content: application/json: schema: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /store/products: get: operationId: listStoreProducts tags: [Store] summary: List online store products description: Introduced in API v2.1. responses: '200': description: A list of store products. content: application/json: schema: type: array items: $ref: '#/components/schemas/StoreProduct' '401': $ref: '#/components/responses/Unauthorized' /store/products/{productId}: parameters: - name: productId in: path required: true description: The ID of the product. schema: type: string get: operationId: getStoreProduct tags: [Store] summary: Retrieve an online store product responses: '200': description: The requested product. content: application/json: schema: $ref: '#/components/schemas/StoreProduct' '404': $ref: '#/components/responses/NotFound' /store/catalogs: get: operationId: listStoreCatalogs tags: [Store] summary: List online store catalogs responses: '200': description: A list of store catalogs. content: application/json: schema: type: array items: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /store/categories: get: operationId: listStoreCategories tags: [Store] summary: List online store categories responses: '200': description: A list of store categories. content: application/json: schema: type: array items: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /volunteers: get: operationId: listVolunteers tags: [Volunteers] summary: List volunteers description: Volunteer Management endpoints added to API v2.9 in November 2024. responses: '200': description: A list of volunteers. content: application/json: schema: type: array items: $ref: '#/components/schemas/Volunteer' '401': $ref: '#/components/responses/Unauthorized' /opportunities: get: operationId: listVolunteerOpportunities tags: [Volunteers] summary: List volunteer opportunities responses: '200': description: A list of volunteer opportunities. content: application/json: schema: type: array items: $ref: '#/components/schemas/VolunteerOpportunity' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createVolunteerOpportunity tags: [Volunteers] summary: Create a volunteer opportunity requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/VolunteerOpportunity' responses: '200': description: The created opportunity. content: application/json: schema: $ref: '#/components/schemas/VolunteerOpportunity' '401': $ref: '#/components/responses/Unauthorized' /opportunities/{id}: parameters: - name: id in: path required: true description: The ID of the volunteer opportunity. schema: type: string get: operationId: getVolunteerOpportunity tags: [Volunteers] summary: Retrieve a volunteer opportunity responses: '200': description: The requested opportunity. content: application/json: schema: $ref: '#/components/schemas/VolunteerOpportunity' '404': $ref: '#/components/responses/NotFound' put: operationId: updateVolunteerOpportunity tags: [Volunteers] summary: Update a volunteer opportunity requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/VolunteerOpportunity' responses: '200': description: The updated opportunity. content: application/json: schema: $ref: '#/components/schemas/VolunteerOpportunity' '404': $ref: '#/components/responses/NotFound' patch: operationId: patchVolunteerOpportunity tags: [Volunteers] summary: Partially update a volunteer opportunity requestBody: required: true content: application/json: schema: type: object additionalProperties: true responses: '200': description: The updated opportunity. content: application/json: schema: $ref: '#/components/schemas/VolunteerOpportunity' '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteVolunteerOpportunity tags: [Volunteers] summary: Delete a volunteer opportunity responses: '200': description: Deletion confirmation. '404': $ref: '#/components/responses/NotFound' /opportunities/{id}/addVolunteers: parameters: - name: id in: path required: true description: The ID of the volunteer opportunity. schema: type: string post: operationId: addVolunteersToOpportunity tags: [Volunteers] summary: Add volunteers to an opportunity description: >- Accepts the opportunityRoles parameter, added in API v2.11, to assign a role during sign-up. requestBody: required: true content: application/json: schema: type: object properties: volunteerIds: type: array items: type: string opportunityRoles: type: array items: type: string responses: '200': description: Assignment result. content: application/json: schema: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /opportunities/{opportunityId}/shifts: parameters: - name: opportunityId in: path required: true description: The ID of the volunteer opportunity. schema: type: string get: operationId: listOpportunityShifts tags: [Volunteers] summary: List shifts for a volunteer opportunity responses: '200': description: A list of shifts. content: application/json: schema: type: array items: $ref: '#/components/schemas/VolunteerShift' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createOpportunityShift tags: [Volunteers] summary: Create a shift for a volunteer opportunity requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/VolunteerShift' responses: '200': description: The created shift. content: application/json: schema: $ref: '#/components/schemas/VolunteerShift' '401': $ref: '#/components/responses/Unauthorized' /timesheets: get: operationId: listTimeSheets tags: [Volunteers] summary: List volunteer time sheets responses: '200': description: A list of time sheets. content: application/json: schema: type: array items: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' post: operationId: createTimeSheet tags: [Volunteers] summary: Create a volunteer time sheet entry requestBody: required: true content: application/json: schema: type: object additionalProperties: true responses: '200': description: The created time sheet entry. content: application/json: schema: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /timesheets/{id}: parameters: - name: id in: path required: true description: The ID of the time sheet entry. schema: type: string get: operationId: getTimeSheet tags: [Volunteers] summary: Retrieve a volunteer time sheet entry responses: '200': description: The requested time sheet entry. content: application/json: schema: type: object additionalProperties: true '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteTimeSheet tags: [Volunteers] summary: Delete a volunteer time sheet entry responses: '200': description: Deletion confirmation. '404': $ref: '#/components/responses/NotFound' /webhooks: get: operationId: listWebhooks tags: [Webhooks] summary: List webhook subscriptions responses: '200': description: A list of webhook subscriptions. content: application/json: schema: type: array items: $ref: '#/components/schemas/Webhook' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createWebhook tags: [Webhooks] summary: Create a webhook subscription requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/WebhookInput' responses: '200': description: The created webhook subscription. content: application/json: schema: $ref: '#/components/schemas/Webhook' '401': $ref: '#/components/responses/Unauthorized' /webhooks/{id}: parameters: - name: id in: path required: true description: The ID of the webhook subscription. schema: type: string get: operationId: getWebhook tags: [Webhooks] summary: Retrieve a webhook subscription responses: '200': description: The requested webhook subscription. content: application/json: schema: $ref: '#/components/schemas/Webhook' '404': $ref: '#/components/responses/NotFound' put: operationId: updateWebhook tags: [Webhooks] summary: Update a webhook subscription requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/WebhookInput' responses: '200': description: The updated webhook subscription. content: application/json: schema: $ref: '#/components/schemas/Webhook' '404': $ref: '#/components/responses/NotFound' patch: operationId: patchWebhook tags: [Webhooks] summary: Partially update a webhook subscription requestBody: required: true content: application/json: schema: type: object additionalProperties: true responses: '200': description: The updated webhook subscription. content: application/json: schema: $ref: '#/components/schemas/Webhook' '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteWebhook tags: [Webhooks] summary: Delete a webhook subscription responses: '200': description: Deletion confirmation. '404': $ref: '#/components/responses/NotFound' /payments/creditCardTypes: get: operationId: listCreditCardTypes tags: [Properties] summary: List accepted credit card types responses: '200': description: A list of credit card types. content: application/json: schema: type: array items: type: object additionalProperties: true /payments/tenders: get: operationId: listPaymentTenders tags: [Properties] summary: List payment tender types description: Includes DAFpay and ACSS tender types added in API v2.10. responses: '200': description: A list of tender types. content: application/json: schema: type: array items: type: object additionalProperties: true /payments/processorSettings: get: operationId: getPaymentProcessorSettings tags: [Properties] summary: Retrieve payment processor settings responses: '200': description: Payment processor settings, including merchant ID for ACH. content: application/json: schema: type: object additionalProperties: true /properties/funds: get: operationId: listFunds tags: [Properties] summary: List funds responses: '200': description: A list of funds. content: application/json: schema: type: array items: type: object additionalProperties: true /properties/purposes: get: operationId: listPurposes tags: [Properties] summary: List purposes responses: '200': description: A list of purposes. content: application/json: schema: type: array items: type: object additionalProperties: true /properties/solicitationMethods: get: operationId: listSolicitationMethods tags: [Properties] summary: List solicitation methods responses: '200': description: A list of solicitation methods. content: application/json: schema: type: array items: type: object additionalProperties: true /properties/countries: get: operationId: listCountries tags: [Properties] summary: List countries responses: '200': description: A list of countries. content: application/json: schema: type: array items: type: object additionalProperties: true /properties/states: get: operationId: listStates tags: [Properties] summary: List states/provinces responses: '200': description: A list of states/provinces. content: application/json: schema: type: array items: type: object additionalProperties: true components: securitySchemes: basicAuth: type: http scheme: basic description: >- HTTP Basic Authentication. Username is the Neon CRM organization's Org ID; password is an API key generated for a system user under Settings > User Management. parameters: AccountId: name: id in: path required: true description: The ID of the account. schema: type: string CustomObjectIdOrApiAlias: name: idOrApiAlias in: path required: true description: The ID or API alias of the custom object. schema: type: string CurrentPage: name: currentPage in: query required: false description: Zero-indexed page number to retrieve. schema: type: integer default: 0 PageSize: name: pageSize in: query required: false description: Number of results per page. schema: type: integer default: 50 responses: Unauthorized: description: Missing or invalid Org ID / API key in the Basic Authorization header. content: application/json: schema: $ref: '#/components/schemas/Error' Forbidden: description: The authenticated API user lacks the permission required for this request. content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: The requested resource was not found. content: application/json: schema: $ref: '#/components/schemas/Error' TooManyRequests: description: The rate limit for simultaneous requests to this endpoint was exceeded. content: application/json: schema: $ref: '#/components/schemas/Error' schemas: Error: type: object properties: errors: type: array items: type: object properties: code: type: string message: type: string AccountInput: type: object properties: individualAccount: type: object additionalProperties: true companyAccount: type: object additionalProperties: true additionalProperties: true Account: allOf: - $ref: '#/components/schemas/AccountInput' - type: object properties: accountId: type: string accountCustomFields: type: array items: type: object additionalProperties: true AccountListResponse: type: object properties: accounts: type: array items: $ref: '#/components/schemas/Account' pagination: type: object additionalProperties: true Contact: type: object properties: contactId: type: string firstName: type: string lastName: type: string email1: type: string additionalProperties: true Address: type: object properties: addressId: type: string accountId: type: string addressLine1: type: string addressLine2: type: string city: type: string stateProvince: type: object additionalProperties: true zipCode: type: string country: type: object additionalProperties: true isPrimaryAddress: type: boolean additionalProperties: true HouseholdInput: type: object required: - name properties: name: type: string householdMembers: type: array items: type: object properties: accountId: type: string relationToHousehold: type: string additionalProperties: true Household: allOf: - $ref: '#/components/schemas/HouseholdInput' - type: object properties: householdId: type: string DonationInput: type: object required: - accountId - amount properties: accountId: type: string amount: type: number format: float campaign: type: object additionalProperties: true fund: type: object additionalProperties: true purpose: type: object additionalProperties: true tribute: type: object additionalProperties: true solicitor: type: array items: type: object properties: accountId: type: string solicitorName: type: string additionalProperties: true Donation: allOf: - $ref: '#/components/schemas/DonationInput' - type: object properties: id: type: string batchNumber: type: string publicRecognitionName: type: string PledgeInput: type: object required: - accountId - amount properties: accountId: type: string amount: type: number format: float matchedDonationId: type: string expectedDate: type: string format: date additionalProperties: true Pledge: allOf: - $ref: '#/components/schemas/PledgeInput' - type: object properties: id: type: string pledgeStatus: type: string enum: [open, closed] RecurringDonation: type: object properties: id: type: string accountId: type: string amount: type: number format: float creditCardOnline: type: object additionalProperties: true ach: type: object additionalProperties: true frequency: type: string additionalProperties: true Campaign: type: object properties: id: type: string name: type: string code: type: string isDefault: type: boolean socialFundraising: type: object properties: enabled: type: boolean additionalProperties: true additionalProperties: true Membership: type: object properties: membershipId: type: string membershipLevel: type: object additionalProperties: true termStartDate: type: string format: date termEndDate: type: string format: date isActive: type: boolean primaryActiveMembership: type: boolean additionalProperties: true EventInput: type: object required: - name properties: name: type: string eventDates: type: object additionalProperties: true category: type: object additionalProperties: true additionalProperties: true Event: allOf: - $ref: '#/components/schemas/EventInput' - type: object properties: id: type: string thumbnailUrl: type: string EventAttendee: type: object properties: registrationId: type: string ticketName: type: string eventName: type: string prefix: type: string email: type: string companyName: type: string addressLine1: type: string city: type: string stateProvince: type: string zipCode: type: string phone1: type: string phone1Type: type: string dob: type: string format: date additionalProperties: true EventRegistrationInput: type: object required: - eventId - accountId properties: eventId: type: string accountId: type: string registrantAccountId: type: string tickets: type: array items: type: object additionalProperties: true additionalProperties: true EventRegistration: allOf: - $ref: '#/components/schemas/EventRegistrationInput' - type: object properties: id: type: string CustomField: type: object properties: id: type: string name: type: string displayName: type: string dataType: type: string enum: - Whole Number - Decimal - Currency - Date - Text - Email component: type: string options: type: array items: type: object additionalProperties: true additionalProperties: true CustomObject: type: object properties: id: type: string apiAlias: type: string name: type: string objectType: type: string enum: [masterDetail, lookUp] additionalProperties: true OrderInput: type: object required: - accountId properties: accountId: type: string totalCharge: type: number format: float donations: type: array items: type: object additionalProperties: true memberships: type: array items: type: object additionalProperties: true storePurchases: type: array items: type: object additionalProperties: true additionalProperties: true Order: allOf: - $ref: '#/components/schemas/OrderInput' - type: object properties: id: type: string StoreProduct: type: object properties: id: type: string name: type: string price: type: number format: float catalogs: type: array items: type: string categories: type: array items: type: string additionalProperties: true Volunteer: type: object properties: id: type: string accountId: type: string skills: type: array items: type: string additionalProperties: true VolunteerOpportunity: type: object properties: id: type: string name: type: string description: type: string additionalProperties: true VolunteerShift: type: object properties: id: type: string opportunityId: type: string startDate: type: string format: date-time endDate: type: string format: date-time additionalProperties: true WebhookInput: type: object required: - name - url - eventTrigger properties: name: type: string url: type: string format: uri eventTrigger: type: string description: >- The event that triggers the webhook POST, e.g. createAccount, updateDonation, deleteMembership. contentType: type: string enum: - application/x-www-form-urlencoded - application/json authentication: type: object properties: username: type: string password: type: string additionalProperties: true customParameters: type: object additionalProperties: type: string additionalProperties: true Webhook: allOf: - $ref: '#/components/schemas/WebhookInput' - type: object properties: id: type: string SearchRequest: type: object required: - searchFields - outputFields properties: searchFields: type: array items: type: object properties: field: type: string operator: type: string value: type: string outputFields: type: array items: type: string pagination: type: object properties: currentPage: type: integer pageSize: type: integer