Skip to main content

Developers · Reference

Registration Entities

Applicant organisations and individuals. 5 operations: parameters, request body and answers, with examples.

GET /api/v2/registration_entities

List registration entities.

Every live registration entity of the Organisation in ascending id order, at most 50 a page. No users: personal data is on the single record only.

  • Operation ID: listRegistrationEntities
  • Authentication: A Bearer token from a credential holding the read scope.
  • Also served at /funding_system/api/v2/registration_entities, the documented product’s alias path.
Example request
curl "https://your-org.backed.giving/api/v2/registration_entities" \
  -H "Authorization: Bearer $BACKED_TOKEN"

Parameters

Parameters of GET /api/v2/registration_entities
NameInRequiredTypeDescription
limitqueryNointegerResults per page (default 50, at most 50; a larger value is read as 50). Not an integer, or below 1: 400. Example: 50.
gtqueryNointegerReturn records with an id greater than this value. Page forward by passing the last id you received. Example: 1287.
ltqueryNointegerReturn records with an id less than this value.

200 response

A JSON array of registration entities.

Fields of RegistrationEntity
FieldTypeRequiredNotes
idintegerYes
created_atstringYes
updated_atstringYes
namestringYes
registration_typeobjectYes
lock_versionintegerYes
Example 200 response
[
  {
    "id": 311,
    "created_at": "2026-03-02T21:15:04.000Z",
    "updated_at": "2026-06-18T03:40:11.000Z",
    "name": "Te Awa Restoration Trust",
    "registration_type": {
      "id": 2,
      "name": "Organisation"
    },
    "lock_version": 4
  }
]

400 response

A query parameter is invalid, or a write’s body is not a JSON object.

Example 400 response
{
  "error": "invalid_request",
  "error_description": "limit is invalid"
}

401 response

The token is missing, invalid, expired or revoked, of another Organisation, or API access is not Full. Ask for a new token.

Headers: WWW-Authenticate.

Example 401 response
{
  "error": "invalid_token",
  "error_description": "The access token is invalid or has expired"
}

403 response

The request was sent over plain HTTP and was not processed.

Example 403 response
{
  "error": "https_required"
}

404 response

An unknown host or path, or an id that is unknown, deleted or of another Organisation.

Example 404 response
{
  "error": "not_found"
}

429 response

A rate limit was exceeded: 120 requests a minute per credential, 30 token requests a minute per client_id.

Headers: Retry-After.

Example 429 response
{
  "error": "rate_limited",
  "error_description": "Too many requests"
}

500 response

An unexpected server error.

Example 500 response
{
  "error": "server_error"
}

503 response

The Organisation’s API access cannot be determined, or a dependency is unavailable. Retry after the given seconds.

Headers: Retry-After.

Example 503 response
{
  "error": "temporarily_unavailable"
}

POST /api/v2/registration_entities

Add an applicant: a person and their registration entity.

Add Applicant as the run-as Administrator (applicants.add). Without invite nobody is told and the record reads Unclaimed.

  • Operation ID: createRegistrationEntity
  • Authentication: A Bearer token from a credential holding the write:registrations scope. Runs as the credential’s Administrator, and needs an Idempotency-Key header.
Example request
curl -X POST "https://your-org.backed.giving/api/v2/registration_entities" \
  -H "Authorization: Bearer $BACKED_TOKEN" \
  -H "Idempotency-Key: 7d1f0c2e-5b8a-4f3e-9c61-2a4b8e9d0f13" \
  -H "Content-Type: application/json" \
  -d '{"registration_type_id":2,"entity_name":"Te Awa Restoration Trust","first_name":"Aroha","last_name":"Ngata","email":"aroha@example.org","invite":true}'

Parameters

Parameters of POST /api/v2/registration_entities
NameInRequiredTypeDescription
Idempotency-KeyheaderYesstringA key of 1 to 255 characters, unique per write. A retry with the same key, method, path and body within 24 hours answers the first response again (with Idempotent-Replayed: true) and writes nothing. Example: 7d1f0c2e-5b8a-4f3e-9c61-2a4b8e9d0f13.

Request body

application/json, the RegistrationEntityCreate schema. Add Applicant: the Registration Type, the person, and for an organisation the entity’s name. invite sends the applicant invitation (default false).

Fields of the RegistrationEntityCreate body
FieldTypeRequiredNotes
registration_type_idintegerYes
entity_namestringNo
first_namestringYes
last_namestringYes
emailstringYes
invitebooleanNo
Example request body
{
  "registration_type_id": 2,
  "entity_name": "Te Awa Restoration Trust",
  "first_name": "Aroha",
  "last_name": "Ngata",
  "email": "aroha@example.org",
  "invite": true
}

201 response

The registration entity as the single read answers it.

Headers: Idempotent-Replayed.

Fields of RegistrationEntityDetail
FieldTypeRequiredNotes
idintegerYes
created_atstringYes
updated_atstringYes
namestringYes
registration_typeobjectYes
lock_versionintegerYes
usersarray of objectYes
Example 201 response
{
  "id": 311,
  "created_at": "2026-03-02T21:15:04.000Z",
  "updated_at": "2026-06-18T03:40:11.000Z",
  "name": "Te Awa Restoration Trust",
  "registration_type": {
    "id": 2,
    "name": "Organisation"
  },
  "lock_version": 4,
  "users": [
    {
      "id": 5012,
      "email": "aroha@example.org",
      "first_name": "Aroha",
      "last_name": "Ngata"
    }
  ]
}

400 response

idempotency_key_required: The write has no Idempotency-Key header of 1 to 255 characters. invalid_request: A query parameter is invalid, or a write’s body is not a JSON object.

Example 400 response: idempotency_key_required
{
  "error": "idempotency_key_required",
  "error_description": "A write needs an Idempotency-Key header of 1 to 255 characters"
}
Example 400 response: invalid_request
{
  "error": "invalid_request",
  "error_description": "limit is invalid"
}

401 response

The token is missing, invalid, expired or revoked, of another Organisation, or API access is not Full. Ask for a new token.

Headers: WWW-Authenticate.

Example 401 response
{
  "error": "invalid_token",
  "error_description": "The access token is invalid or has expired"
}

403 response

https_required: The request was sent over plain HTTP and was not processed. insufficient_scope: The credential does not hold the scope the route needs. run_as_disabled: The credential has no run-as Administrator, or that person is no longer one. forbidden: The run-as Administrator lacks the permission, or the record is outside their Data Access Rules.

Headers: WWW-Authenticate.

Example 403 response: https_required
{
  "error": "https_required"
}
Example 403 response: insufficient_scope
{
  "error": "insufficient_scope",
  "error_description": "This credential lacks the write:applications scope"
}
Example 403 response: run_as_disabled
{
  "error": "run_as_disabled",
  "error_description": "This credential has no enabled run-as Administrator"
}
Example 403 response: forbidden
{
  "error": "forbidden",
  "error_description": "The run-as Administrator may not do this to this record"
}

404 response

An unknown host or path, or an id that is unknown, deleted or of another Organisation.

Example 404 response
{
  "error": "not_found"
}

409 response

The first request with this Idempotency-Key has not finished. Nothing was written; retry after the given seconds.

Headers: Retry-After.

Example 409 response
{
  "error": "idempotency_in_progress",
  "error_description": "The first request with this Idempotency-Key has not finished. If this persists it stopped part-way: check whether the record exists before writing again with a new key"
}

413 response

The body, or the declared file, is larger than the limit that applies.

Example 413 response
{
  "error": "payload_too_large",
  "error_description": "The request body is too large"
}

415 response

The body is not application/json, or the target does not accept the file’s content type.

Example 415 response
{
  "error": "unsupported_media_type",
  "error_description": "The request body must be application/json"
}

422 response

idempotency_key_reused: The Idempotency-Key was used in the last 24 hours for a different method, path or body. unknown_field: The body has a property the route does not document; the first is named. validation_failed: Body values the product’s own form would refuse; fields names each.

Example 422 response: idempotency_key_reused
{
  "error": "idempotency_key_reused",
  "error_description": "This Idempotency-Key was used for a different request"
}
Example 422 response: unknown_field
{
  "error": "unknown_field",
  "error_description": "bank_account_number is not a writable field"
}
Example 422 response: validation_failed
{
  "error": "validation_failed",
  "error_description": "Invalid fields: due_date",
  "fields": [
    "due_date"
  ]
}

429 response

A rate limit was exceeded: 120 requests a minute per credential, 30 token requests a minute per client_id.

Headers: Retry-After.

Example 429 response
{
  "error": "rate_limited",
  "error_description": "Too many requests"
}

500 response

An unexpected server error.

Example 500 response
{
  "error": "server_error"
}

503 response

The Organisation’s API access cannot be determined, or a dependency is unavailable. Retry after the given seconds.

Headers: Retry-After.

Example 503 response
{
  "error": "temporarily_unavailable"
}

GET /api/v2/registration_entities/{id}

Get one registration entity with its users.

Every list property, then users[]: the account owner first.

  • Operation ID: getRegistrationEntity
  • Authentication: A Bearer token from a credential holding the read scope.
  • Also served at /funding_system/api/v2/registration_entities/{id}, the documented product’s alias path.
Example request
curl "https://your-org.backed.giving/api/v2/registration_entities/42" \
  -H "Authorization: Bearer $BACKED_TOKEN"

Parameters

Parameters of GET /api/v2/registration_entities/{id}
NameInRequiredTypeDescription
idpathYesintegerThe record id. Anything but a positive integer is 404. Example: 42.

200 response

The registration entity with its users.

Fields of RegistrationEntityDetail
FieldTypeRequiredNotes
idintegerYes
created_atstringYes
updated_atstringYes
namestringYes
registration_typeobjectYes
lock_versionintegerYes
usersarray of objectYes
Example 200 response
{
  "id": 311,
  "created_at": "2026-03-02T21:15:04.000Z",
  "updated_at": "2026-06-18T03:40:11.000Z",
  "name": "Te Awa Restoration Trust",
  "registration_type": {
    "id": 2,
    "name": "Organisation"
  },
  "lock_version": 4,
  "users": [
    {
      "id": 5012,
      "email": "aroha@example.org",
      "first_name": "Aroha",
      "last_name": "Ngata"
    }
  ]
}

401 response

The token is missing, invalid, expired or revoked, of another Organisation, or API access is not Full. Ask for a new token.

Headers: WWW-Authenticate.

Example 401 response
{
  "error": "invalid_token",
  "error_description": "The access token is invalid or has expired"
}

403 response

The request was sent over plain HTTP and was not processed.

Example 403 response
{
  "error": "https_required"
}

404 response

An unknown host or path, or an id that is unknown, deleted or of another Organisation.

Example 404 response
{
  "error": "not_found"
}

429 response

A rate limit was exceeded: 120 requests a minute per credential, 30 token requests a minute per client_id.

Headers: Retry-After.

Example 429 response
{
  "error": "rate_limited",
  "error_description": "Too many requests"
}

500 response

An unexpected server error.

Example 500 response
{
  "error": "server_error"
}

503 response

The Organisation’s API access cannot be determined, or a dependency is unavailable. Retry after the given seconds.

Headers: Retry-After.

Example 503 response
{
  "error": "temporarily_unavailable"
}

PATCH /api/v2/registration_entities/{id}

Edit an organisation’s Founded date and stage override.

The profile’s own edit (applicants.edit) at the If-Match version: a stale version is 412 before anything is written. Never the bank account.

  • Operation ID: updateRegistrationEntity
  • Authentication: A Bearer token from a credential holding the write:registrations scope. Runs as the credential’s Administrator, and needs an Idempotency-Key header.
Example request
curl -X PATCH "https://your-org.backed.giving/api/v2/registration_entities/42" \
  -H "Authorization: Bearer $BACKED_TOKEN" \
  -H "If-Match: 4" \
  -H "Idempotency-Key: 7d1f0c2e-5b8a-4f3e-9c61-2a4b8e9d0f13" \
  -H "Content-Type: application/json" \
  -d '{"founded_on":"2014-03-01","stage_override":"growth","stage_override_reason":"Confirmed by the 2025 annual report."}'

Parameters

Parameters of PATCH /api/v2/registration_entities/{id}
NameInRequiredTypeDescription
idpathYesintegerThe record id. Anything but a positive integer is 404. Example: 42.
If-MatchheaderYesstringThe record’s lock_version as you last read it, bare or quoted (3 or "3"). Example: 4.
Idempotency-KeyheaderYesstringA key of 1 to 255 characters, unique per write. A retry with the same key, method, path and body within 24 hours answers the first response again (with Idempotent-Replayed: true) and writes nothing. Example: 7d1f0c2e-5b8a-4f3e-9c61-2a4b8e9d0f13.

Request body

application/json, the RegistrationEntityUpdate schema. An organisation’s Founded date and stage override. Only the properties sent change.

Fields of the RegistrationEntityUpdate body
FieldTypeRequiredNotes
founded_onstring | nullNo
stage_overridestring | nullNoOne of seed, early, growth, advanced.
stage_override_reasonstring | nullNo
Example request body
{
  "founded_on": "2014-03-01",
  "stage_override": "growth",
  "stage_override_reason": "Confirmed by the 2025 annual report."
}

200 response

The registration entity as the single read answers it.

Headers: Idempotent-Replayed.

Fields of RegistrationEntityDetail
FieldTypeRequiredNotes
idintegerYes
created_atstringYes
updated_atstringYes
namestringYes
registration_typeobjectYes
lock_versionintegerYes
usersarray of objectYes
Example 200 response
{
  "id": 311,
  "created_at": "2026-03-02T21:15:04.000Z",
  "updated_at": "2026-06-18T03:40:11.000Z",
  "name": "Te Awa Restoration Trust",
  "registration_type": {
    "id": 2,
    "name": "Organisation"
  },
  "lock_version": 4,
  "users": [
    {
      "id": 5012,
      "email": "aroha@example.org",
      "first_name": "Aroha",
      "last_name": "Ngata"
    }
  ]
}

400 response

idempotency_key_required: The write has no Idempotency-Key header of 1 to 255 characters. invalid_request: A query parameter is invalid, or a write’s body is not a JSON object.

Example 400 response: idempotency_key_required
{
  "error": "idempotency_key_required",
  "error_description": "A write needs an Idempotency-Key header of 1 to 255 characters"
}
Example 400 response: invalid_request
{
  "error": "invalid_request",
  "error_description": "limit is invalid"
}

401 response

The token is missing, invalid, expired or revoked, of another Organisation, or API access is not Full. Ask for a new token.

Headers: WWW-Authenticate.

Example 401 response
{
  "error": "invalid_token",
  "error_description": "The access token is invalid or has expired"
}

403 response

https_required: The request was sent over plain HTTP and was not processed. insufficient_scope: The credential does not hold the scope the route needs. run_as_disabled: The credential has no run-as Administrator, or that person is no longer one. forbidden: The run-as Administrator lacks the permission, or the record is outside their Data Access Rules.

Headers: WWW-Authenticate.

Example 403 response: https_required
{
  "error": "https_required"
}
Example 403 response: insufficient_scope
{
  "error": "insufficient_scope",
  "error_description": "This credential lacks the write:applications scope"
}
Example 403 response: run_as_disabled
{
  "error": "run_as_disabled",
  "error_description": "This credential has no enabled run-as Administrator"
}
Example 403 response: forbidden
{
  "error": "forbidden",
  "error_description": "The run-as Administrator may not do this to this record"
}

404 response

An unknown host or path, or an id that is unknown, deleted or of another Organisation.

Example 404 response
{
  "error": "not_found"
}

409 response

The first request with this Idempotency-Key has not finished. Nothing was written; retry after the given seconds.

Headers: Retry-After.

Example 409 response
{
  "error": "idempotency_in_progress",
  "error_description": "The first request with this Idempotency-Key has not finished. If this persists it stopped part-way: check whether the record exists before writing again with a new key"
}

412 response

If-Match is missing, malformed or not the record’s current lock_version, or the record changed under the write. Nothing was written.

Example 412 response
{
  "error": "precondition_failed",
  "error_description": "If-Match must carry the record’s current lock_version"
}

413 response

The body, or the declared file, is larger than the limit that applies.

Example 413 response
{
  "error": "payload_too_large",
  "error_description": "The request body is too large"
}

415 response

The body is not application/json, or the target does not accept the file’s content type.

Example 415 response
{
  "error": "unsupported_media_type",
  "error_description": "The request body must be application/json"
}

422 response

idempotency_key_reused: The Idempotency-Key was used in the last 24 hours for a different method, path or body. unknown_field: The body has a property the route does not document; the first is named. validation_failed: Body values the product’s own form would refuse; fields names each.

Example 422 response: idempotency_key_reused
{
  "error": "idempotency_key_reused",
  "error_description": "This Idempotency-Key was used for a different request"
}
Example 422 response: unknown_field
{
  "error": "unknown_field",
  "error_description": "bank_account_number is not a writable field"
}
Example 422 response: validation_failed
{
  "error": "validation_failed",
  "error_description": "Invalid fields: due_date",
  "fields": [
    "due_date"
  ]
}

429 response

A rate limit was exceeded: 120 requests a minute per credential, 30 token requests a minute per client_id.

Headers: Retry-After.

Example 429 response
{
  "error": "rate_limited",
  "error_description": "Too many requests"
}

500 response

An unexpected server error.

Example 500 response
{
  "error": "server_error"
}

503 response

The Organisation’s API access cannot be determined, or a dependency is unavailable. Retry after the given seconds.

Headers: Retry-After.

Example 503 response
{
  "error": "temporarily_unavailable"
}

POST /api/v2/registration_entities/{id}/users

Invite a user to a registration entity.

Invite Applicant (applicants.invite): an existing person is attached, never duplicated; a new address is sent the applicant invitation, never a password.

  • Operation ID: addRegistrationEntityUser
  • Authentication: A Bearer token from a credential holding the write:registrations scope. Runs as the credential’s Administrator, and needs an Idempotency-Key header.
Example request
curl -X POST "https://your-org.backed.giving/api/v2/registration_entities/42/users" \
  -H "Authorization: Bearer $BACKED_TOKEN" \
  -H "Idempotency-Key: 7d1f0c2e-5b8a-4f3e-9c61-2a4b8e9d0f13" \
  -H "Content-Type: application/json" \
  -d '{"email":"rawiri@example.org","first_name":"Rawiri","last_name":"Ngata"}'

Parameters

Parameters of POST /api/v2/registration_entities/{id}/users
NameInRequiredTypeDescription
idpathYesintegerThe record id. Anything but a positive integer is 404. Example: 42.
Idempotency-KeyheaderYesstringA key of 1 to 255 characters, unique per write. A retry with the same key, method, path and body within 24 hours answers the first response again (with Idempotent-Replayed: true) and writes nothing. Example: 7d1f0c2e-5b8a-4f3e-9c61-2a4b8e9d0f13.

Request body

application/json, the RegistrationEntityUserCreate schema. Invite Applicant: an existing person of the Organisation is attached; a new address is sent the applicant invitation.

Fields of the RegistrationEntityUserCreate body
FieldTypeRequiredNotes
emailstringYes
first_namestringYes
last_namestringYes
Example request body
{
  "email": "rawiri@example.org",
  "first_name": "Rawiri",
  "last_name": "Ngata"
}

201 response

The membership.

Headers: Idempotent-Replayed.

Fields of RegistrationEntityMembership
FieldTypeRequiredNotes
registration_entity_idintegerYes
user_idintegerYes
emailstringYes
invitedbooleanYes
Example 201 response
{
  "registration_entity_id": 311,
  "user_id": 5013,
  "email": "rawiri@example.org",
  "invited": true
}

400 response

idempotency_key_required: The write has no Idempotency-Key header of 1 to 255 characters. invalid_request: A query parameter is invalid, or a write’s body is not a JSON object.

Example 400 response: idempotency_key_required
{
  "error": "idempotency_key_required",
  "error_description": "A write needs an Idempotency-Key header of 1 to 255 characters"
}
Example 400 response: invalid_request
{
  "error": "invalid_request",
  "error_description": "limit is invalid"
}

401 response

The token is missing, invalid, expired or revoked, of another Organisation, or API access is not Full. Ask for a new token.

Headers: WWW-Authenticate.

Example 401 response
{
  "error": "invalid_token",
  "error_description": "The access token is invalid or has expired"
}

403 response

https_required: The request was sent over plain HTTP and was not processed. insufficient_scope: The credential does not hold the scope the route needs. run_as_disabled: The credential has no run-as Administrator, or that person is no longer one. forbidden: The run-as Administrator lacks the permission, or the record is outside their Data Access Rules.

Headers: WWW-Authenticate.

Example 403 response: https_required
{
  "error": "https_required"
}
Example 403 response: insufficient_scope
{
  "error": "insufficient_scope",
  "error_description": "This credential lacks the write:applications scope"
}
Example 403 response: run_as_disabled
{
  "error": "run_as_disabled",
  "error_description": "This credential has no enabled run-as Administrator"
}
Example 403 response: forbidden
{
  "error": "forbidden",
  "error_description": "The run-as Administrator may not do this to this record"
}

404 response

An unknown host or path, or an id that is unknown, deleted or of another Organisation.

Example 404 response
{
  "error": "not_found"
}

409 response

The first request with this Idempotency-Key has not finished. Nothing was written; retry after the given seconds.

Headers: Retry-After.

Example 409 response
{
  "error": "idempotency_in_progress",
  "error_description": "The first request with this Idempotency-Key has not finished. If this persists it stopped part-way: check whether the record exists before writing again with a new key"
}

413 response

The body, or the declared file, is larger than the limit that applies.

Example 413 response
{
  "error": "payload_too_large",
  "error_description": "The request body is too large"
}

415 response

The body is not application/json, or the target does not accept the file’s content type.

Example 415 response
{
  "error": "unsupported_media_type",
  "error_description": "The request body must be application/json"
}

422 response

idempotency_key_reused: The Idempotency-Key was used in the last 24 hours for a different method, path or body. unknown_field: The body has a property the route does not document; the first is named. validation_failed: Body values the product’s own form would refuse; fields names each.

Example 422 response: idempotency_key_reused
{
  "error": "idempotency_key_reused",
  "error_description": "This Idempotency-Key was used for a different request"
}
Example 422 response: unknown_field
{
  "error": "unknown_field",
  "error_description": "bank_account_number is not a writable field"
}
Example 422 response: validation_failed
{
  "error": "validation_failed",
  "error_description": "Invalid fields: due_date",
  "fields": [
    "due_date"
  ]
}

429 response

A rate limit was exceeded: 120 requests a minute per credential, 30 token requests a minute per client_id.

Headers: Retry-After.

Example 429 response
{
  "error": "rate_limited",
  "error_description": "Too many requests"
}

500 response

An unexpected server error.

Example 500 response
{
  "error": "server_error"
}

503 response

The Organisation’s API access cannot be determined, or a dependency is unavailable. Retry after the given seconds.

Headers: Retry-After.

Example 503 response
{
  "error": "temporarily_unavailable"
}