{"openapi":"3.1.0","jsonSchemaDialect":"https://spec.openapis.org/oas/3.1/dialect/base","info":{"title":"Backed Public API","version":"2","summary":"REST API through which an Organisation’s own systems read and write its data, with signed webhooks and an OData reporting feed.","description":"The public API of an Organisation on Backed, generated from the frozen route catalogue and the contract schemas the API itself parses and answers with, so it cannot drift from what is served.\n\nAuthenticate with the OAuth 2.0 client-credentials grant at POST /oauth/token, using an API credential from API Access, and send `Authorization: Bearer <token>`. Every read needs the `read` scope, which every credential holds; each write needs its `write:*` scope, an `Idempotency-Key` header, and runs as the credential's Administrator with their permissions and approval limits.\n\nLists answer a bare JSON array in ascending id order, at most 50 a page: page forward with `gt`. Every documented property is always present, `null` when unset. Every read path is also served under the alias prefix in `x-path-alias-prefix`. HEAD is answered like GET without a body; any other method on a path returns the response in `x-unsupported-method-response`. Requests are limited to 120 a minute per credential.\n\nWebhooks (`webhooks`, `x-webhook-events`) deliver the Organisation's events to its endpoints, signed with HMAC-SHA256. Power BI, Tableau and warehouse loaders read the OData v4 feed at /odata/v4 (`x-odata-feed`). Guides, the event catalogue and the changelog: https://backed.giving/developers.","x-versions":[{"path":"v2","status":"current","deprecatedAt":null,"sunsetAt":null}]},"servers":[{"url":"https://your-org.backed.giving","description":"Your Organisation’s host. The paths below include their /api/v2 prefix; /oauth/token is at the host root."}],"externalDocs":{"url":"https://backed.giving/developers","description":"The developer site: guides, the event catalogue and the changelog."},"security":[{"clientCredentials":[]}],"tags":[{"name":"Authentication","description":"Exchange a credential for an access token."},{"name":"Funding Rounds","description":"The Organisation’s funding rounds."},{"name":"Funding Applications","description":"Applications, their entries, moves, notes and tags."},{"name":"Registration Entities","description":"Applicant organisations and individuals."},{"name":"Assessment Rounds","description":"Assessor assignments."},{"name":"Contracts","description":"Contracts and their recorded statuses."},{"name":"Milestones","description":"Milestones with their deliverables."},{"name":"Payments","description":"Payment batches."},{"name":"File Inputs","description":"Downloads of files held by application and deliverable inputs."},{"name":"Files","description":"The three-step file upload."},{"name":"Reference","description":"This document."},{"name":"Webhooks","description":"Signed event deliveries to your endpoints."}],"paths":{"/api/v2/assessment_rounds/{id}/assignments":{"post":{"operationId":"createAssessorAssignment","tags":["Assessment Rounds"],"summary":"Assign an Assessor to applications in an assessment round.","description":"A Draft round’s pending pairs, or a Published round’s Assessments. An Assessor with a declared conflict of interest is 409 `conflict_declared`. Needs the Assessments module.","security":[{"clientCredentials":["write:assessments"]}],"parameters":[{"$ref":"#/components/parameters/id"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssessorAssignmentCreate"},"example":{"assessor_user_id":5100,"funding_application_ids":[1287,1288],"notify":true}}}},"responses":{"201":{"description":"What the Assessor now holds.","headers":{"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssessorAssignment"},"example":{"assessment_round_id":88,"assessor_user_id":5100,"round_status":"published","funding_application_ids":[1287,1288],"notified":true}}}},"400":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_required":{"$ref":"#/components/examples/idempotency_key_required"},"invalid_request":{"$ref":"#/components/examples/invalid_request"}}}}},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"description":"`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":{"$ref":"#/components/headers/WwwAuthenticateScope"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"https_required":{"$ref":"#/components/examples/https_required"},"insufficient_scope":{"$ref":"#/components/examples/insufficient_scope"},"run_as_disabled":{"$ref":"#/components/examples/run_as_disabled"},"forbidden":{"$ref":"#/components/examples/forbidden"}}}}},"404":{"description":"`not_found`: An unknown host or path, or an id that is unknown, deleted or of another Organisation. `module_disabled`: The Organisation has the module this route belongs to turned off.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"not_found":{"$ref":"#/components/examples/not_found"},"module_disabled":{"$ref":"#/components/examples/module_disabled"}}}}},"409":{"description":"`idempotency_in_progress`: The first request with this Idempotency-Key has not finished. Nothing was written; retry after the given seconds. `invalid_state`: The record is not in a state that admits this write. `conflict_declared`: The Assessor has declared a conflict of interest with an application.","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_in_progress":{"$ref":"#/components/examples/idempotency_in_progress"},"invalid_state":{"$ref":"#/components/examples/invalid_state"},"conflict_declared":{"$ref":"#/components/examples/conflict_declared"}}}}},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_reused":{"$ref":"#/components/examples/idempotency_key_reused"},"unknown_field":{"$ref":"#/components/examples/unknown_field"},"validation_failed":{"$ref":"#/components/examples/validation_failed"}}}}},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicAssessorAssignmentsController#create","x-scope":"write:assessments"}},"/api/v2/contracts":{"get":{"operationId":"listContracts","tags":["Contracts"],"summary":"List contracts.","description":"Every contract of the Organisation in ascending id order, at most 50 a page.","security":[{"clientCredentials":["read"]}],"parameters":[{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/gt"},{"$ref":"#/components/parameters/lt"}],"responses":{"200":{"description":"A JSON array of contracts.","content":{"application/json":{"schema":{"type":"array","maxItems":50,"items":{"$ref":"#/components/schemas/Contract"}},"example":[{"id":640,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","title":"Funding agreement: Te Awa river restoration","amount":"24500.0","contract_start_date":"2026-08-01","contract_end_date":"2027-07-31","state":"signed","contract_type":"standard","registration_entity":{"id":311,"name":"Te Awa Restoration Trust"},"lock_version":1}]}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"$ref":"#/components/responses/HttpsRequired"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicContractsController#list","x-scope":"read"}},"/api/v2/contracts/{id}":{"get":{"operationId":"getContract","tags":["Contracts"],"summary":"Get one contract.","description":"The same object as the list item.","security":[{"clientCredentials":["read"]}],"parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"The contract.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contract"},"example":{"id":640,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","title":"Funding agreement: Te Awa river restoration","amount":"24500.0","contract_start_date":"2026-08-01","contract_end_date":"2027-07-31","state":"signed","contract_type":"standard","registration_entity":{"id":311,"name":"Te Awa Restoration Trust"},"lock_version":1}}}},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"$ref":"#/components/responses/HttpsRequired"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicContractsController#one","x-scope":"read"}},"/api/v2/contracts/{id}/status":{"post":{"operationId":"recordContractStatus","tags":["Contracts"],"summary":"Record a contract executed or terminated.","description":"`executed` is the Administrator’s counter-signature (`contracts.counter_sign`); `terminated` is `Terminate Contract` (`contracts.terminate`) and needs a `reason`. Needs the Contracts module.","security":[{"clientCredentials":["write:post_award"]}],"parameters":[{"$ref":"#/components/parameters/id"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContractStatusChange"},"example":{"status":"executed"}}}},"responses":{"200":{"description":"The contract as the single read answers it.","headers":{"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contract"},"example":{"id":640,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","title":"Funding agreement: Te Awa river restoration","amount":"24500.0","contract_start_date":"2026-08-01","contract_end_date":"2027-07-31","state":"signed","contract_type":"standard","registration_entity":{"id":311,"name":"Te Awa Restoration Trust"},"lock_version":1}}}},"400":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_required":{"$ref":"#/components/examples/idempotency_key_required"},"invalid_request":{"$ref":"#/components/examples/invalid_request"}}}}},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"description":"`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":{"$ref":"#/components/headers/WwwAuthenticateScope"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"https_required":{"$ref":"#/components/examples/https_required"},"insufficient_scope":{"$ref":"#/components/examples/insufficient_scope"},"run_as_disabled":{"$ref":"#/components/examples/run_as_disabled"},"forbidden":{"$ref":"#/components/examples/forbidden"}}}}},"404":{"description":"`not_found`: An unknown host or path, or an id that is unknown, deleted or of another Organisation. `module_disabled`: The Organisation has the module this route belongs to turned off.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"not_found":{"$ref":"#/components/examples/not_found"},"module_disabled":{"$ref":"#/components/examples/module_disabled"}}}}},"409":{"description":"`idempotency_in_progress`: The first request with this Idempotency-Key has not finished. Nothing was written; retry after the given seconds. `invalid_transition`: The move is not open from where the record stands; `current_status` says where that is. `invalid_state`: The record is not in a state that admits this write.","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_in_progress":{"$ref":"#/components/examples/idempotency_in_progress"},"invalid_transition":{"$ref":"#/components/examples/invalid_transition"},"invalid_state":{"$ref":"#/components/examples/invalid_state"}}}}},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_reused":{"$ref":"#/components/examples/idempotency_key_reused"},"unknown_field":{"$ref":"#/components/examples/unknown_field"},"validation_failed":{"$ref":"#/components/examples/validation_failed"}}}}},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicContractsController#recordStatus","x-scope":"write:post_award"}},"/api/v2/file_inputs/{id}":{"get":{"operationId":"downloadFileInput","tags":["File Inputs"],"summary":"Download the file an input holds.","description":"The raw bytes of a live application’s file answer or a live milestone’s deliverable file, as `tahua_file_url` names it. A file still being scanned, infected or disposed is 404.","security":[{"clientCredentials":["read"]}],"parameters":[{"$ref":"#/components/parameters/fileInputId"}],"responses":{"200":{"description":"The file’s bytes, with its own content type.","headers":{"Content-Disposition":{"$ref":"#/components/headers/ContentDisposition"},"Content-Length":{"$ref":"#/components/headers/ContentLength"},"Cache-Control":{"$ref":"#/components/headers/CacheControlPrivate"}},"content":{"*/*":{"schema":{"type":"string","contentMediaType":"application/octet-stream"}}}},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"$ref":"#/components/responses/HttpsRequired"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicFileInputsController#download","x-scope":"read"}},"/api/v2/files":{"post":{"operationId":"reserveFileUpload","tags":["Files"],"summary":"Reserve a file upload.","description":"Step 1 of 3. The target is checked and authorised as the product’s own action on it, the size and content type against its limits, all before anything is stored; then a 15-minute presigned upload is answered.","security":[{"clientCredentials":["write:files"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileUploadRequest"},"example":{"filename":"final-report.pdf","content_type":"application/pdf","size":482113,"target":{"type":"milestone_deliverable","id":2210,"field":950}}}}},"responses":{"201":{"description":"The upload id and presigned upload.","headers":{"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileUploadReserved"},"example":{"id":"upl_3Jq9xVb2LmT8sKp4Rz7Wn1Ye","upload":{"url":"https://uploads.example.com/backed","method":"POST","fields":{"key":"tmp/2026/11/09/3f0c9d1e","policy":"eyJleHBpcmF0aW9uIjoi...","x-amz-signature":"9c1f4e..."},"headers":{}},"expires_at":"2026-11-09T02:45:00.000Z","max_bytes":104857600,"state":"awaiting_upload"}}}},"400":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_required":{"$ref":"#/components/examples/idempotency_key_required"},"invalid_request":{"$ref":"#/components/examples/invalid_request"}}}}},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"description":"`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":{"$ref":"#/components/headers/WwwAuthenticateScope"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"https_required":{"$ref":"#/components/examples/https_required"},"insufficient_scope":{"$ref":"#/components/examples/insufficient_scope"},"run_as_disabled":{"$ref":"#/components/examples/run_as_disabled"},"forbidden":{"$ref":"#/components/examples/forbidden"}}}}},"404":{"$ref":"#/components/responses/NotFound"},"409":{"description":"`idempotency_in_progress`: The first request with this Idempotency-Key has not finished. Nothing was written; retry after the given seconds. `invalid_state`: The record is not in a state that admits this write.","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_in_progress":{"$ref":"#/components/examples/idempotency_in_progress"},"invalid_state":{"$ref":"#/components/examples/invalid_state"}}}}},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_reused":{"$ref":"#/components/examples/idempotency_key_reused"},"unknown_field":{"$ref":"#/components/examples/unknown_field"},"validation_failed":{"$ref":"#/components/examples/validation_failed"}}}}},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicFileUploadsController#reserve","x-scope":"write:files"}},"/api/v2/files/{id}/attach":{"post":{"operationId":"attachFileUpload","tags":["Files"],"summary":"Attach a scanned file to its target.","description":"Step 3 of 3. Only a clean file is attached: still scanning is 409 `file_not_scanned`; rejected by the scan is 422 `file_infected`. No body. A repeat answers the same attachment.","security":[{"clientCredentials":["write:files"]}],"parameters":[{"$ref":"#/components/parameters/uploadId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"The attachment.","headers":{"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileAttached"},"example":{"id":99120,"state":"attached","target":{"type":"milestone_deliverable","id":2210,"field":950}}}}},"400":{"$ref":"#/components/responses/IdempotencyKeyRequired"},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"description":"`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":{"$ref":"#/components/headers/WwwAuthenticateScope"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"https_required":{"$ref":"#/components/examples/https_required"},"insufficient_scope":{"$ref":"#/components/examples/insufficient_scope"},"run_as_disabled":{"$ref":"#/components/examples/run_as_disabled"},"forbidden":{"$ref":"#/components/examples/forbidden"}}}}},"404":{"$ref":"#/components/responses/NotFound"},"409":{"description":"`idempotency_in_progress`: The first request with this Idempotency-Key has not finished. Nothing was written; retry after the given seconds. `file_not_scanned`: The file has not finished its malware scan; try the attach again shortly. `invalid_state`: The record is not in a state that admits this write.","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_in_progress":{"$ref":"#/components/examples/idempotency_in_progress"},"file_not_scanned":{"$ref":"#/components/examples/file_not_scanned"},"invalid_state":{"$ref":"#/components/examples/invalid_state"}}}}},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"description":"`idempotency_key_reused`: The Idempotency-Key was used in the last 24 hours for a different method, path or body. `file_infected`: The file failed its malware scan and was not attached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_reused":{"$ref":"#/components/examples/idempotency_key_reused"},"file_infected":{"$ref":"#/components/examples/file_infected"}}}}},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicFileUploadsController#attach","x-scope":"write:files"}},"/api/v2/files/{id}/confirm":{"post":{"operationId":"confirmFileUpload","tags":["Files"],"summary":"Confirm a file upload.","description":"Step 2 of 3, after the bytes are uploaded: the file is recorded and its malware scan begins. No body. Not yet uploaded: 409 `invalid_state`.","security":[{"clientCredentials":["write:files"]}],"parameters":[{"$ref":"#/components/parameters/uploadId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"The scan has begun.","headers":{"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileConfirmed"},"example":{"id":"upl_3Jq9xVb2LmT8sKp4Rz7Wn1Ye","state":"scanning"}}}},"400":{"$ref":"#/components/responses/IdempotencyKeyRequired"},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"description":"`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":{"$ref":"#/components/headers/WwwAuthenticateScope"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"https_required":{"$ref":"#/components/examples/https_required"},"insufficient_scope":{"$ref":"#/components/examples/insufficient_scope"},"run_as_disabled":{"$ref":"#/components/examples/run_as_disabled"},"forbidden":{"$ref":"#/components/examples/forbidden"}}}}},"404":{"$ref":"#/components/responses/NotFound"},"409":{"description":"`idempotency_in_progress`: The first request with this Idempotency-Key has not finished. Nothing was written; retry after the given seconds. `invalid_state`: The record is not in a state that admits this write.","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_in_progress":{"$ref":"#/components/examples/idempotency_in_progress"},"invalid_state":{"$ref":"#/components/examples/invalid_state"}}}}},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/IdempotencyKeyReused"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicFileUploadsController#confirm","x-scope":"write:files"}},"/api/v2/funding_applications":{"get":{"operationId":"listFundingApplications","tags":["Funding Applications"],"summary":"List funding applications.","description":"The Organisation's live funding applications in ascending id order, at most 50 a page, narrowed by the filter flags and `q`. `bank_account_number` is null unless the credential may read bank account numbers.","security":[{"clientCredentials":["read"]}],"parameters":[{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/gt"},{"$ref":"#/components/parameters/lt"},{"$ref":"#/components/parameters/submitted"},{"$ref":"#/components/parameters/with_contract"},{"$ref":"#/components/parameters/not_initial"},{"$ref":"#/components/parameters/q"},{"$ref":"#/components/parameters/extra_methods"}],"responses":{"200":{"description":"A JSON array of funding applications.","content":{"application/json":{"schema":{"type":"array","maxItems":50,"items":{"$ref":"#/components/schemas/FundingApplication"}},"example":[{"id":1287,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","funding_round_id":42,"state":"submitted","title":"Te Awa river restoration","submitted_at":"2026-05-20T04:12:55.000Z","funding_category":{"id":7,"name":"Community"},"registration_entity":{"id":311,"name":"Te Awa Restoration Trust"},"lock_version":3,"requested_amount":"24500.0"}]}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"$ref":"#/components/responses/HttpsRequired"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicFundingApplicationsController#list","x-scope":"read"}},"/api/v2/funding_applications/{id}":{"get":{"operationId":"getFundingApplication","tags":["Funding Applications"],"summary":"Get one funding application with its form entry.","description":"Every list property (and the named extra methods), then `entry` with every input. Answers hidden by form logic are included and not marked.","security":[{"clientCredentials":["read"]}],"parameters":[{"$ref":"#/components/parameters/id"},{"$ref":"#/components/parameters/extra_methods"}],"responses":{"200":{"description":"The funding application with its form entry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FundingApplicationDetail"},"example":{"id":1287,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","funding_round_id":42,"state":"submitted","title":"Te Awa river restoration","submitted_at":"2026-05-20T04:12:55.000Z","funding_category":{"id":7,"name":"Community"},"registration_entity":{"id":311,"name":"Te Awa Restoration Trust"},"lock_version":3,"requested_amount":"24500.0","entry":{"id":9001,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-05-20T04:12:55.000Z","inputs":[{"id":55120,"value":"Te Awa river restoration","input_group_id":null,"input_group_order":null,"field":{"id":801,"internal_identifier":"project_title","name":"Project title","order":1},"file":null,"tahua_file_url":null},{"id":55121,"value":"budget.pdf","input_group_id":null,"input_group_order":null,"field":{"id":802,"internal_identifier":"budget","name":"Budget","order":2},"file":{"filename":"budget.pdf","content_type":"application/pdf","byte_size":182044},"tahua_file_url":"https://your-org.backed.giving/api/v2/file_inputs/55121"}]}}}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"$ref":"#/components/responses/HttpsRequired"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicFundingApplicationsController#one","x-scope":"read"}},"/api/v2/funding_applications/{id}/notes":{"post":{"operationId":"createApplicationNote","tags":["Funding Applications"],"summary":"Add a note to a funding application.","description":"Kept as an Internal Comment (`internal_comments.create`), labelled with the credential and the run-as Administrator.","security":[{"clientCredentials":["write:applications"]}],"parameters":[{"$ref":"#/components/parameters/id"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationNoteCreate"},"example":{"body":"Budget checked against the supplier quote."}}}},"responses":{"201":{"description":"The note.","headers":{"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationNote"},"example":{"id":7781,"body":"Budget checked against the supplier quote.","author_label":"API: Finance sync as Mere Tane","created_at":"2026-05-20T04:12:55.000Z"}}}},"400":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_required":{"$ref":"#/components/examples/idempotency_key_required"},"invalid_request":{"$ref":"#/components/examples/invalid_request"}}}}},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"description":"`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":{"$ref":"#/components/headers/WwwAuthenticateScope"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"https_required":{"$ref":"#/components/examples/https_required"},"insufficient_scope":{"$ref":"#/components/examples/insufficient_scope"},"run_as_disabled":{"$ref":"#/components/examples/run_as_disabled"},"forbidden":{"$ref":"#/components/examples/forbidden"}}}}},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/IdempotencyInProgress"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_reused":{"$ref":"#/components/examples/idempotency_key_reused"},"unknown_field":{"$ref":"#/components/examples/unknown_field"},"validation_failed":{"$ref":"#/components/examples/validation_failed"}}}}},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicApplicationNotesController#create","x-scope":"write:applications"}},"/api/v2/funding_applications/{id}/tags":{"put":{"operationId":"replaceApplicationTags","tags":["Funding Applications"],"summary":"Replace a funding application’s tags.","description":"The hand-set tags become exactly these existing tags of the Organisation (`applications.tags`). A tag not in the Organisation’s vocabulary is 422 `unknown_tag`; none is created. Needs the Assessments module.","security":[{"clientCredentials":["write:applications"]}],"parameters":[{"$ref":"#/components/parameters/id"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationTags"},"example":{"tags":["priority","rural"]}}}},"responses":{"200":{"description":"The tags now set.","headers":{"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationTags"},"example":{"tags":["priority","rural"]}}}},"400":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_required":{"$ref":"#/components/examples/idempotency_key_required"},"invalid_request":{"$ref":"#/components/examples/invalid_request"}}}}},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"description":"`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":{"$ref":"#/components/headers/WwwAuthenticateScope"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"https_required":{"$ref":"#/components/examples/https_required"},"insufficient_scope":{"$ref":"#/components/examples/insufficient_scope"},"run_as_disabled":{"$ref":"#/components/examples/run_as_disabled"},"forbidden":{"$ref":"#/components/examples/forbidden"}}}}},"404":{"description":"`not_found`: An unknown host or path, or an id that is unknown, deleted or of another Organisation. `module_disabled`: The Organisation has the module this route belongs to turned off.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"not_found":{"$ref":"#/components/examples/not_found"},"module_disabled":{"$ref":"#/components/examples/module_disabled"}}}}},"409":{"$ref":"#/components/responses/IdempotencyInProgress"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"description":"`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. `unknown_tag`: A tag is not one of the Organisation’s tags. None is created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_reused":{"$ref":"#/components/examples/idempotency_key_reused"},"unknown_field":{"$ref":"#/components/examples/unknown_field"},"validation_failed":{"$ref":"#/components/examples/validation_failed"},"unknown_tag":{"$ref":"#/components/examples/unknown_tag"}}}}},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicApplicationTagsController#replace","x-scope":"write:applications"}},"/api/v2/funding_applications/{id}/transitions":{"post":{"operationId":"transitionFundingApplication","tags":["Funding Applications"],"summary":"Move a funding application.","description":"One of the Administrator’s record moves through the application’s own rules, with the messages and audit entries the screen makes. A move not open from the current status is 409 `invalid_transition` naming it. An `unlock` needs a `deadline` that is a future UTC timestamp with milliseconds, such as `2027-06-07T11:59:00.000Z`.","security":[{"clientCredentials":["write:applications"]}],"parameters":[{"$ref":"#/components/parameters/id"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationTransition"},"example":{"transition":"unlock","message":"Please attach the updated budget.","deadline":"2027-06-07T11:59:00.000Z"}}}},"responses":{"200":{"description":"The funding application as the list answers it.","headers":{"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FundingApplication"},"example":{"id":1287,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","funding_round_id":42,"state":"submitted","title":"Te Awa river restoration","submitted_at":"2026-05-20T04:12:55.000Z","funding_category":{"id":7,"name":"Community"},"registration_entity":{"id":311,"name":"Te Awa Restoration Trust"},"lock_version":3,"requested_amount":"24500.0"}}}},"400":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_required":{"$ref":"#/components/examples/idempotency_key_required"},"invalid_request":{"$ref":"#/components/examples/invalid_request"}}}}},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"description":"`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":{"$ref":"#/components/headers/WwwAuthenticateScope"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"https_required":{"$ref":"#/components/examples/https_required"},"insufficient_scope":{"$ref":"#/components/examples/insufficient_scope"},"run_as_disabled":{"$ref":"#/components/examples/run_as_disabled"},"forbidden":{"$ref":"#/components/examples/forbidden"}}}}},"404":{"$ref":"#/components/responses/NotFound"},"409":{"description":"`idempotency_in_progress`: The first request with this Idempotency-Key has not finished. Nothing was written; retry after the given seconds. `invalid_transition`: The move is not open from where the record stands; `current_status` says where that is. `invalid_state`: The record is not in a state that admits this write.","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_in_progress":{"$ref":"#/components/examples/idempotency_in_progress"},"invalid_transition":{"$ref":"#/components/examples/invalid_transition"},"invalid_state":{"$ref":"#/components/examples/invalid_state"}}}}},"412":{"$ref":"#/components/responses/PreconditionFailed"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_reused":{"$ref":"#/components/examples/idempotency_key_reused"},"unknown_field":{"$ref":"#/components/examples/unknown_field"},"validation_failed":{"$ref":"#/components/examples/validation_failed"}}}}},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicFundingApplicationsController#transition","x-scope":"write:applications"}},"/api/v2/funding_rounds":{"get":{"operationId":"listFundingRounds","tags":["Funding Rounds"],"summary":"List funding rounds.","description":"Every funding round of the Organisation in ascending id order, at most 50 a page.","security":[{"clientCredentials":["read"]}],"parameters":[{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/gt"},{"$ref":"#/components/parameters/lt"}],"responses":{"200":{"description":"A JSON array of funding rounds.","content":{"application/json":{"schema":{"type":"array","maxItems":50,"items":{"$ref":"#/components/schemas/FundingRound"}},"example":[{"id":42,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","name":"Community Grants 2026 Round 1","description":"Grants of up to $25,000 for community-led projects.","start_date":"2026-04-01T00:00:00.000Z","ent_date":"2026-05-31T11:59:00.000Z","total_funding":"500000.0","funding_amount_per_application":"25000.0","category":"Community","round_number":1,"phase":null,"phase_parent_id":null,"is_private":false,"is_continuous":false,"archived":false,"published_at":"2026-03-20T22:00:00.000Z","board_hui_date":"2026-07-14T00:00:00.000Z","board_notifications":null,"letter_of_offer_deadline_date":null,"grace_period_in_minutes":15,"cloned_from_id":null,"group":{"id":3,"name":"Community Grants"},"funding_category":{"id":7,"name":"Community"},"programme":{"id":2,"name":"Community Investment"}}]}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"$ref":"#/components/responses/HttpsRequired"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicFundingRoundsController#list","x-scope":"read"}},"/api/v2/funding_rounds/{id}":{"get":{"operationId":"getFundingRound","tags":["Funding Rounds"],"summary":"Get one funding round.","description":"The same object as the list item.","security":[{"clientCredentials":["read"]}],"parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"The funding round.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FundingRound"},"example":{"id":42,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","name":"Community Grants 2026 Round 1","description":"Grants of up to $25,000 for community-led projects.","start_date":"2026-04-01T00:00:00.000Z","ent_date":"2026-05-31T11:59:00.000Z","total_funding":"500000.0","funding_amount_per_application":"25000.0","category":"Community","round_number":1,"phase":null,"phase_parent_id":null,"is_private":false,"is_continuous":false,"archived":false,"published_at":"2026-03-20T22:00:00.000Z","board_hui_date":"2026-07-14T00:00:00.000Z","board_notifications":null,"letter_of_offer_deadline_date":null,"grace_period_in_minutes":15,"cloned_from_id":null,"group":{"id":3,"name":"Community Grants"},"funding_category":{"id":7,"name":"Community"},"programme":{"id":2,"name":"Community Investment"}}}}},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"$ref":"#/components/responses/HttpsRequired"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicFundingRoundsController#one","x-scope":"read"}},"/api/v2/milestones":{"get":{"operationId":"listMilestones","tags":["Milestones"],"summary":"List milestones.","description":"Every milestone of the Organisation (application, contract and standalone) in ascending id order, at most 50 a page, each with its deliverables entry. Every filter is ANDed; any other `filters[…]` key is 400.","security":[{"clientCredentials":["read"]}],"parameters":[{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/gt"},{"$ref":"#/components/parameters/lt"},{"$ref":"#/components/parameters/filterDeliverablesValue"},{"$ref":"#/components/parameters/filterDeliverablesTags"},{"$ref":"#/components/parameters/filterDeliverablesTag"},{"$ref":"#/components/parameters/filterIds"}],"responses":{"200":{"description":"A JSON array of milestones.","content":{"application/json":{"schema":{"type":"array","maxItems":50,"items":{"$ref":"#/components/schemas/Milestone"}},"example":[{"id":2210,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","title":"Final report","contract_id":640,"funding_amount":"4500.0","description":"A report on the outcomes the project achieved.","state":"submitted","paid_at":null,"decline_reason":null,"due_date":"2027-06-30","contract":{"id":640,"title":"Funding agreement: Te Awa river restoration"},"lock_version":2,"deliverables_template_entry":{"id":9310,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","inputs":[{"id":77001,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","value":"final-report.pdf","file":{"filename":"final-report.pdf","content_type":"application/pdf","byte_size":482113},"tahua_file_url":"https://your-org.backed.giving/api/v2/file_inputs/77001","field":{"id":950,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-03-02T21:15:04.000Z","internal_identifier":"report"}}]}}]}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"$ref":"#/components/responses/HttpsRequired"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicMilestonesController#list","x-scope":"read"},"post":{"operationId":"createMilestone","tags":["Milestones"],"summary":"Create a milestone on a funding application.","description":"`Create Singular` as the run-as Administrator (`milestones.create`). Needs the Contracts module.","security":[{"clientCredentials":["write:post_award"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MilestoneCreate"},"example":{"funding_application_id":"1287","title":"Progress report","due_date":"2026-12-15","amount":"5000.00","form_template_id":"61","description":"A six-month progress report."}}}},"responses":{"201":{"description":"The milestone as the single read answers it.","headers":{"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Milestone"},"example":{"id":2210,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","title":"Final report","contract_id":640,"funding_amount":"4500.0","description":"A report on the outcomes the project achieved.","state":"submitted","paid_at":null,"decline_reason":null,"due_date":"2027-06-30","contract":{"id":640,"title":"Funding agreement: Te Awa river restoration"},"lock_version":2,"deliverables_template_entry":{"id":9310,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","inputs":[{"id":77001,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","value":"final-report.pdf","file":{"filename":"final-report.pdf","content_type":"application/pdf","byte_size":482113},"tahua_file_url":"https://your-org.backed.giving/api/v2/file_inputs/77001","field":{"id":950,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-03-02T21:15:04.000Z","internal_identifier":"report"}}]}}}}},"400":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_required":{"$ref":"#/components/examples/idempotency_key_required"},"invalid_request":{"$ref":"#/components/examples/invalid_request"}}}}},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"description":"`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":{"$ref":"#/components/headers/WwwAuthenticateScope"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"https_required":{"$ref":"#/components/examples/https_required"},"insufficient_scope":{"$ref":"#/components/examples/insufficient_scope"},"run_as_disabled":{"$ref":"#/components/examples/run_as_disabled"},"forbidden":{"$ref":"#/components/examples/forbidden"}}}}},"404":{"description":"`not_found`: An unknown host or path, or an id that is unknown, deleted or of another Organisation. `module_disabled`: The Organisation has the module this route belongs to turned off.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"not_found":{"$ref":"#/components/examples/not_found"},"module_disabled":{"$ref":"#/components/examples/module_disabled"}}}}},"409":{"$ref":"#/components/responses/IdempotencyInProgress"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_reused":{"$ref":"#/components/examples/idempotency_key_reused"},"unknown_field":{"$ref":"#/components/examples/unknown_field"},"validation_failed":{"$ref":"#/components/examples/validation_failed"}}}}},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicMilestonesController#create","x-scope":"write:post_award"}},"/api/v2/milestones/{id}":{"get":{"operationId":"getMilestone","tags":["Milestones"],"summary":"Get one milestone.","description":"Exactly the list item, its deliverables entry included. Filters are ignored.","security":[{"clientCredentials":["read"]}],"parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"The milestone.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Milestone"},"example":{"id":2210,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","title":"Final report","contract_id":640,"funding_amount":"4500.0","description":"A report on the outcomes the project achieved.","state":"submitted","paid_at":null,"decline_reason":null,"due_date":"2027-06-30","contract":{"id":640,"title":"Funding agreement: Te Awa river restoration"},"lock_version":2,"deliverables_template_entry":{"id":9310,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","inputs":[{"id":77001,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","value":"final-report.pdf","file":{"filename":"final-report.pdf","content_type":"application/pdf","byte_size":482113},"tahua_file_url":"https://your-org.backed.giving/api/v2/file_inputs/77001","field":{"id":950,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-03-02T21:15:04.000Z","internal_identifier":"report"}}]}}}}},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"$ref":"#/components/responses/HttpsRequired"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicMilestonesController#one","x-scope":"read"}},"/api/v2/milestones/{id}/approve":{"post":{"operationId":"approveMilestone","tags":["Milestones"],"summary":"Approve a milestone.","description":"`Approve Milestone` at its current version (`milestones.approve`), within the run-as Administrator’s Milestone Approval Limit. No body. Needs the Contracts module.","security":[{"clientCredentials":["write:post_award"]}],"parameters":[{"$ref":"#/components/parameters/id"},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"The milestone as the single read answers it.","headers":{"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Milestone"},"example":{"id":2210,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","title":"Final report","contract_id":640,"funding_amount":"4500.0","description":"A report on the outcomes the project achieved.","state":"submitted","paid_at":null,"decline_reason":null,"due_date":"2027-06-30","contract":{"id":640,"title":"Funding agreement: Te Awa river restoration"},"lock_version":2,"deliverables_template_entry":{"id":9310,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","inputs":[{"id":77001,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","value":"final-report.pdf","file":{"filename":"final-report.pdf","content_type":"application/pdf","byte_size":482113},"tahua_file_url":"https://your-org.backed.giving/api/v2/file_inputs/77001","field":{"id":950,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-03-02T21:15:04.000Z","internal_identifier":"report"}}]}}}}},"400":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_required":{"$ref":"#/components/examples/idempotency_key_required"},"invalid_request":{"$ref":"#/components/examples/invalid_request"}}}}},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"description":"`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. `approval_limit_exceeded`: The amount is above the run-as Administrator’s approval limit.","headers":{"WWW-Authenticate":{"$ref":"#/components/headers/WwwAuthenticateScope"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"https_required":{"$ref":"#/components/examples/https_required"},"insufficient_scope":{"$ref":"#/components/examples/insufficient_scope"},"run_as_disabled":{"$ref":"#/components/examples/run_as_disabled"},"forbidden":{"$ref":"#/components/examples/forbidden"},"approval_limit_exceeded":{"$ref":"#/components/examples/approval_limit_exceeded"}}}}},"404":{"description":"`not_found`: An unknown host or path, or an id that is unknown, deleted or of another Organisation. `module_disabled`: The Organisation has the module this route belongs to turned off.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"not_found":{"$ref":"#/components/examples/not_found"},"module_disabled":{"$ref":"#/components/examples/module_disabled"}}}}},"409":{"description":"`idempotency_in_progress`: The first request with this Idempotency-Key has not finished. Nothing was written; retry after the given seconds. `invalid_transition`: The move is not open from where the record stands; `current_status` says where that is. `invalid_state`: The record is not in a state that admits this write.","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_in_progress":{"$ref":"#/components/examples/idempotency_in_progress"},"invalid_transition":{"$ref":"#/components/examples/invalid_transition"},"invalid_state":{"$ref":"#/components/examples/invalid_state"}}}}},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_reused":{"$ref":"#/components/examples/idempotency_key_reused"},"unknown_field":{"$ref":"#/components/examples/unknown_field"}}}}},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicMilestonesController#approve","x-scope":"write:post_award"}},"/api/v2/openapi.json":{"get":{"operationId":"documentApiOpenApi","tags":["Reference"],"summary":"This OpenAPI 3.1 document.","description":"The same document on every Organisation host, with that host as its server. No credential is needed.","security":[{}],"responses":{"200":{"description":"The OpenAPI 3.1 document.","content":{"application/json":{"schema":{"type":"object","description":"An OpenAPI 3.1.0 document."},"example":{"openapi":"3.1.0","info":{"title":"Backed Public API","version":"2"}}}}},"403":{"$ref":"#/components/responses/HttpsRequired"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/ServerError"}},"x-handler":"PublicApiOpenApiController#document"}},"/api/v2/payments/{id}/mark_paid":{"post":{"operationId":"markPaymentPaid","tags":["Payments"],"summary":"Mark a payment batch paid.","description":"`Mark as Paid` on the payment batch (`payments.mark_paid`), the Paid Date written to each payment it marks. Needs the Payments module.","security":[{"clientCredentials":["write:post_award"]}],"parameters":[{"$ref":"#/components/parameters/id"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentMarkPaid"},"example":{"paid_date":"2026-11-09","reference":"BNZ-20261109-0042"}}}},"responses":{"200":{"description":"The batch as the mark left it.","headers":{"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentMarkedPaid"},"example":{"id":315,"status":"paid","marked_paid_at":"2026-11-09T02:30:00.000Z","paid_date":"2026-11-09","reference":"BNZ-20261109-0042","payment_count":12,"amount_total":"182500.0"}}}},"400":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_required":{"$ref":"#/components/examples/idempotency_key_required"},"invalid_request":{"$ref":"#/components/examples/invalid_request"}}}}},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"description":"`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":{"$ref":"#/components/headers/WwwAuthenticateScope"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"https_required":{"$ref":"#/components/examples/https_required"},"insufficient_scope":{"$ref":"#/components/examples/insufficient_scope"},"run_as_disabled":{"$ref":"#/components/examples/run_as_disabled"},"forbidden":{"$ref":"#/components/examples/forbidden"}}}}},"404":{"description":"`not_found`: An unknown host or path, or an id that is unknown, deleted or of another Organisation. `module_disabled`: The Organisation has the module this route belongs to turned off.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"not_found":{"$ref":"#/components/examples/not_found"},"module_disabled":{"$ref":"#/components/examples/module_disabled"}}}}},"409":{"description":"`idempotency_in_progress`: The first request with this Idempotency-Key has not finished. Nothing was written; retry after the given seconds. `invalid_transition`: The move is not open from where the record stands; `current_status` says where that is.","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_in_progress":{"$ref":"#/components/examples/idempotency_in_progress"},"invalid_transition":{"$ref":"#/components/examples/invalid_transition"}}}}},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_reused":{"$ref":"#/components/examples/idempotency_key_reused"},"unknown_field":{"$ref":"#/components/examples/unknown_field"},"validation_failed":{"$ref":"#/components/examples/validation_failed"}}}}},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicPaymentsController#markPaid","x-scope":"write:post_award"}},"/api/v2/registration_entities":{"get":{"operationId":"listRegistrationEntities","tags":["Registration Entities"],"summary":"List registration entities.","description":"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.","security":[{"clientCredentials":["read"]}],"parameters":[{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/gt"},{"$ref":"#/components/parameters/lt"}],"responses":{"200":{"description":"A JSON array of registration entities.","content":{"application/json":{"schema":{"type":"array","maxItems":50,"items":{"$ref":"#/components/schemas/RegistrationEntity"}},"example":[{"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":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"$ref":"#/components/responses/HttpsRequired"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicRegistrationEntitiesController#list","x-scope":"read"},"post":{"operationId":"createRegistrationEntity","tags":["Registration Entities"],"summary":"Add an applicant: a person and their registration entity.","description":"`Add Applicant` as the run-as Administrator (`applicants.add`). Without `invite` nobody is told and the record reads Unclaimed.","security":[{"clientCredentials":["write:registrations"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationEntityCreate"},"example":{"registration_type_id":2,"entity_name":"Te Awa Restoration Trust","first_name":"Aroha","last_name":"Ngata","email":"aroha@example.org","invite":true}}}},"responses":{"201":{"description":"The registration entity as the single read answers it.","headers":{"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationEntityDetail"},"example":{"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":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_required":{"$ref":"#/components/examples/idempotency_key_required"},"invalid_request":{"$ref":"#/components/examples/invalid_request"}}}}},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"description":"`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":{"$ref":"#/components/headers/WwwAuthenticateScope"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"https_required":{"$ref":"#/components/examples/https_required"},"insufficient_scope":{"$ref":"#/components/examples/insufficient_scope"},"run_as_disabled":{"$ref":"#/components/examples/run_as_disabled"},"forbidden":{"$ref":"#/components/examples/forbidden"}}}}},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/IdempotencyInProgress"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_reused":{"$ref":"#/components/examples/idempotency_key_reused"},"unknown_field":{"$ref":"#/components/examples/unknown_field"},"validation_failed":{"$ref":"#/components/examples/validation_failed"}}}}},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicRegistrationEntitiesController#create","x-scope":"write:registrations"}},"/api/v2/registration_entities/{id}":{"get":{"operationId":"getRegistrationEntity","tags":["Registration Entities"],"summary":"Get one registration entity with its users.","description":"Every list property, then `users[]`: the account owner first.","security":[{"clientCredentials":["read"]}],"parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"The registration entity with its users.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationEntityDetail"},"example":{"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":{"$ref":"#/components/responses/InvalidToken"},"403":{"$ref":"#/components/responses/HttpsRequired"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicRegistrationEntitiesController#one","x-scope":"read"},"patch":{"operationId":"updateRegistrationEntity","tags":["Registration Entities"],"summary":"Edit an organisation’s Founded date and stage override.","description":"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.","security":[{"clientCredentials":["write:registrations"]}],"parameters":[{"$ref":"#/components/parameters/id"},{"$ref":"#/components/parameters/IfMatch"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationEntityUpdate"},"example":{"founded_on":"2014-03-01","stage_override":"growth","stage_override_reason":"Confirmed by the 2025 annual report."}}}},"responses":{"200":{"description":"The registration entity as the single read answers it.","headers":{"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationEntityDetail"},"example":{"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":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_required":{"$ref":"#/components/examples/idempotency_key_required"},"invalid_request":{"$ref":"#/components/examples/invalid_request"}}}}},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"description":"`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":{"$ref":"#/components/headers/WwwAuthenticateScope"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"https_required":{"$ref":"#/components/examples/https_required"},"insufficient_scope":{"$ref":"#/components/examples/insufficient_scope"},"run_as_disabled":{"$ref":"#/components/examples/run_as_disabled"},"forbidden":{"$ref":"#/components/examples/forbidden"}}}}},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/IdempotencyInProgress"},"412":{"$ref":"#/components/responses/PreconditionFailed"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_reused":{"$ref":"#/components/examples/idempotency_key_reused"},"unknown_field":{"$ref":"#/components/examples/unknown_field"},"validation_failed":{"$ref":"#/components/examples/validation_failed"}}}}},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicRegistrationEntitiesController#update","x-scope":"write:registrations"}},"/api/v2/registration_entities/{id}/users":{"post":{"operationId":"addRegistrationEntityUser","tags":["Registration Entities"],"summary":"Invite a user to a registration entity.","description":"`Invite Applicant` (`applicants.invite`): an existing person is attached, never duplicated; a new address is sent the applicant invitation, never a password.","security":[{"clientCredentials":["write:registrations"]}],"parameters":[{"$ref":"#/components/parameters/id"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationEntityUserCreate"},"example":{"email":"rawiri@example.org","first_name":"Rawiri","last_name":"Ngata"}}}},"responses":{"201":{"description":"The membership.","headers":{"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationEntityMembership"},"example":{"registration_entity_id":311,"user_id":5013,"email":"rawiri@example.org","invited":true}}}},"400":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_required":{"$ref":"#/components/examples/idempotency_key_required"},"invalid_request":{"$ref":"#/components/examples/invalid_request"}}}}},"401":{"$ref":"#/components/responses/InvalidToken"},"403":{"description":"`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":{"$ref":"#/components/headers/WwwAuthenticateScope"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"https_required":{"$ref":"#/components/examples/https_required"},"insufficient_scope":{"$ref":"#/components/examples/insufficient_scope"},"run_as_disabled":{"$ref":"#/components/examples/run_as_disabled"},"forbidden":{"$ref":"#/components/examples/forbidden"}}}}},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/IdempotencyInProgress"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"description":"`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.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"idempotency_key_reused":{"$ref":"#/components/examples/idempotency_key_reused"},"unknown_field":{"$ref":"#/components/examples/unknown_field"},"validation_failed":{"$ref":"#/components/examples/validation_failed"}}}}},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"PublicRegistrationEntitiesController#addUser","x-scope":"write:registrations"}},"/oauth/token":{"post":{"operationId":"issueOAuthToken","tags":["Authentication"],"summary":"Obtain an access token with the OAuth 2.0 client-credentials grant.","description":"Form-encoded body; client_id and client_secret may instead be sent with HTTP Basic authentication. Each success issues a new token valid 432000 seconds (5 days). Throttled to 30 requests a minute per client_id, counted before the secret is checked.","security":[{},{"clientBasic":[]}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/TokenRequest"},"example":{"grant_type":"client_credentials","client_id":"your-client-id","client_secret":"your-client-secret"}}}},"responses":{"200":{"description":"Token issued. Shown once; never cached.","headers":{"Cache-Control":{"$ref":"#/components/headers/CacheControlNoStore"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"},"example":{"access_token":"q3Vx9LmT2sKp4Rz7Wn1YeB8cD5fG6hJ0kN_aQ-uIoPr","token_type":"Bearer","expires_in":432000,"created_at":1762650000}}}},"400":{"description":"`invalid_request`: A query parameter is invalid, or a write’s body is not a JSON object. `unsupported_grant_type`: The grant type is not client_credentials.","headers":{"Cache-Control":{"$ref":"#/components/headers/CacheControlNoStore"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"invalid_request":{"$ref":"#/components/examples/missing_parameter"},"unsupported_grant_type":{"$ref":"#/components/examples/unsupported_grant_type"}}}}},"401":{"$ref":"#/components/responses/InvalidClient"},"403":{"$ref":"#/components/responses/HttpsRequired"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/TemporarilyUnavailable"}},"x-handler":"OAuthTokenController#issue"}}},"webhooks":{"backedEvent":{"post":{"operationId":"receiveBackedEvent","tags":["Webhooks"],"summary":"A webhook delivery, sent to each endpoint subscribed to the event.","description":"Backed POSTs one event as JSON to your endpoint's URL. Verify `Backed-Signature` before trusting the body: it is `t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\">`, one `v1=` per valid secret (two for 24 hours after a secret is rolled). Recompute the HMAC with your endpoint's signing secret over the raw body, compare in constant time, and reject a `t` older than five minutes. `Backed-Event-Id` is the same on every attempt and every replay: de-duplicate on it. Answer any 2xx within 10 seconds; anything else is retried after 1 minute, 5 minutes, 30 minutes, 2 hours, 12 hours and 24 hours, and an endpoint failing 50 times in a row is disabled. Deliveries for one record arrive in order. `x-webhook-events` lists every event type.","security":[],"parameters":[{"name":"Backed-Signature","in":"header","required":true,"description":"The HMAC-SHA256 signature: `t=<unix seconds>,v1=<hex>[,v1=<hex>]`.","schema":{"type":"string","pattern":"^t=\\d+(,v1=[0-9a-f]{64})+$"},"example":"t=1762650000,v1=5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f"},{"name":"Backed-Event-Id","in":"header","required":true,"description":"The event id, as the body’s `id`.","schema":{"type":"string"},"example":"918273"},{"name":"Backed-Event-Type","in":"header","required":true,"description":"The event type, as the body’s `type`.","schema":{"type":"string"},"example":"rounds.funding_round.published"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDeliveryPayload"},"example":{"id":"918273","type":"rounds.funding_round.published","version":1,"occurred_at":"2026-11-09T01:00:00.000Z","organisation":"17","data":{"record_type":"funding_round","record_id":"42","url":"https://your-org.backed.giving/api/v2/funding_rounds/42"}}}}},"responses":{"2XX":{"description":"Received. Any 2xx within 10 seconds settles the delivery."},"default":{"description":"Anything else, or no answer in 10 seconds: the delivery is retried."}},"x-handler":"WebhookDeliverySender#send"}}},"components":{"securitySchemes":{"clientCredentials":{"type":"oauth2","description":"OAuth 2.0 client-credentials grant. Send `Authorization: Bearer <access token>`. Tokens expire after 432000 seconds (5 days); on a 401, ask for a new one. A credential's scopes are chosen when it is created in API Access; every write also runs as the credential's Administrator.","flows":{"clientCredentials":{"tokenUrl":"/oauth/token","scopes":{"read":"Read every /api/v2 resource. Every credential holds it.","read:reporting_feed":"Read the OData v4 reporting feed at /odata/v4.","write:registrations":"Create and edit registration entities and invite their users.","write:applications":"Move funding applications, add notes and replace tags.","write:assessments":"Assign Assessors to applications in an assessment round.","write:post_award":"Create and approve milestones, mark payment batches paid, record contracts.","write:files":"Upload files to deliverables, application notes and registration entities."}}}},"clientBasic":{"type":"http","scheme":"basic","description":"Optional HTTP Basic client authentication at the token endpoint, with client_id and client_secret."}},"parameters":{"limit":{"name":"limit","in":"query","required":false,"description":"Results per page (default 50, at most 50; a larger value is read as 50). Not an integer, or below 1: 400.","schema":{"type":"integer","minimum":1,"default":50},"example":50},"gt":{"name":"gt","in":"query","required":false,"description":"Return records with an id greater than this value. Page forward by passing the last id you received.","schema":{"type":"integer"},"example":1287},"lt":{"name":"lt","in":"query","required":false,"description":"Return records with an id less than this value.","schema":{"type":"integer"}},"submitted":{"name":"submitted","in":"query","required":false,"description":"Set to `1` to return only submitted applications; any other value is ignored.","schema":{"type":"string"},"example":"1"},"with_contract":{"name":"with_contract","in":"query","required":false,"description":"Set to `1` to return only applications with a contract.","schema":{"type":"string"},"example":"1"},"not_initial":{"name":"not_initial","in":"query","required":false,"description":"Set to `1` to exclude applications in their initial state.","schema":{"type":"string"},"example":"1"},"q":{"name":"q","in":"query","required":false,"description":"Text search; blank is ignored.","schema":{"type":"string"},"example":"river"},"extra_methods":{"name":"extra_methods[]","in":"query","required":false,"description":"Additional properties to include, each once, in the order named. Any other value is 400.","style":"form","explode":true,"schema":{"type":"array","items":{"type":"string","enum":["requested_amount","recommended_amount","bank_account_number","registration_entity_id"]}},"example":["requested_amount","recommended_amount"]},"id":{"name":"id","in":"path","required":true,"description":"The record id. Anything but a positive integer is 404.","schema":{"type":"integer","minimum":1},"example":42},"fileInputId":{"name":"id","in":"path","required":true,"description":"The id of the file input to download, as its `tahua_file_url` names it.","schema":{"type":"integer","minimum":1},"example":55121},"uploadId":{"name":"id","in":"path","required":true,"description":"The opaque upload id `POST /api/v2/files` answered, for the credential that reserved it.","schema":{"type":"string","pattern":"^upl_[A-Za-z0-9_-]{24}$"},"example":"upl_3Jq9xVb2LmT8sKp4Rz7Wn1Ye"},"filterDeliverablesValue":{"name":"filters[deliverables][value]","in":"query","required":false,"description":"Match deliverable input values; `%` is a wildcard for partial matching.","schema":{"type":"string"},"example":"%Smith%"},"filterDeliverablesTags":{"name":"filters[deliverables][tags][]","in":"query","required":false,"description":"Filter by the internal_identifier of deliverable fields.","style":"form","explode":true,"schema":{"type":"array","items":{"type":"string"}},"example":["artist_name","song_title"]},"filterDeliverablesTag":{"name":"filters[deliverables][tag]","in":"query","required":false,"description":"Combine a tag with filters[deliverables][value] to search within one field.","schema":{"type":"string"},"example":"artist_name"},"filterIds":{"name":"filters[ids][]","in":"query","required":false,"description":"Filter by milestone ids.","style":"form","explode":true,"schema":{"type":"array","items":{"type":"integer","minimum":1}},"example":[2210,2211]},"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":true,"description":"A 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.","schema":{"type":"string","minLength":1,"maxLength":255},"example":"7d1f0c2e-5b8a-4f3e-9c61-2a4b8e9d0f13"},"IfMatch":{"name":"If-Match","in":"header","required":true,"description":"The record’s `lock_version` as you last read it, bare or quoted (`3` or `\"3\"`).","schema":{"type":"string","pattern":"^\\s*\"?\\d{1,10}\"?\\s*$"},"example":"4"}},"headers":{"CacheControlNoStore":{"description":"Token responses are never cached.","schema":{"type":"string","const":"no-store"}},"RetryAfter":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}},"WwwAuthenticate":{"description":"The Bearer challenge on a 401.","schema":{"type":"string","const":"Bearer error=\"invalid_token\""}},"WwwAuthenticateScope":{"description":"The Bearer challenge on a 403 `insufficient_scope`, naming the scope.","schema":{"type":"string"},"example":"Bearer error=\"insufficient_scope\", scope=\"write:applications\""},"Allow":{"description":"The methods the path serves.","schema":{"type":"string"},"example":"GET, HEAD"},"IdempotentReplayed":{"description":"`true` when the answer is a replay of the Idempotency-Key’s first request.","schema":{"type":"string","const":"true"}},"ContentDisposition":{"description":"`attachment; filename=\"<original file name>\"`, with `filename*` for non-ASCII.","schema":{"type":"string"}},"ContentLength":{"description":"The file size in bytes.","schema":{"type":"integer"}},"CacheControlPrivate":{"description":"A file is one Organisation’s: no cache may keep it.","schema":{"type":"string","const":"private, no-store"}}},"responses":{"InvalidRequest":{"description":"A query parameter is invalid, or a write’s body is not a JSON object.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_request","error_description":"limit is invalid"}}}},"UnsupportedGrantType":{"description":"The grant type is not client_credentials.","headers":{"Cache-Control":{"$ref":"#/components/headers/CacheControlNoStore"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"unsupported_grant_type","error_description":"Only client_credentials is supported"}}}},"InvalidClient":{"description":"Client authentication failed: an unknown client_id, a wrong secret, a revoked credential or another Organisation’s, or API access is not Full.","headers":{"Cache-Control":{"$ref":"#/components/headers/CacheControlNoStore"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_client","error_description":"Client authentication failed"}}}},"InvalidToken":{"description":"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":{"$ref":"#/components/headers/WwwAuthenticate"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_token","error_description":"The access token is invalid or has expired"}}}},"HttpsRequired":{"description":"The request was sent over plain HTTP and was not processed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"https_required"}}}},"NotFound":{"description":"An unknown host or path, or an id that is unknown, deleted or of another Organisation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"not_found"}}}},"MethodNotAllowed":{"description":"The method is not served on this path. `Allow` lists what is: `GET, HEAD` on a read path, `POST` on /oauth/token, the write’s own method on a write path.","headers":{"Allow":{"$ref":"#/components/headers/Allow"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"method_not_allowed"}}}},"RateLimited":{"description":"A rate limit was exceeded: 120 requests a minute per credential, 30 token requests a minute per client_id.","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limited","error_description":"Too many requests"}}}},"ServerError":{"description":"An unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"server_error"}}}},"TemporarilyUnavailable":{"description":"The Organisation’s API access cannot be determined, or a dependency is unavailable. Retry after the given seconds.","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"temporarily_unavailable"}}}},"InsufficientScope":{"description":"The credential does not hold the scope the route needs.","headers":{"WWW-Authenticate":{"$ref":"#/components/headers/WwwAuthenticateScope"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"insufficient_scope","error_description":"This credential lacks the write:applications scope"}}}},"Forbidden":{"description":"The run-as Administrator lacks the permission, or the record is outside their Data Access Rules.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"forbidden","error_description":"The run-as Administrator may not do this to this record"}}}},"RunAsDisabled":{"description":"The credential has no run-as Administrator, or that person is no longer one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"run_as_disabled","error_description":"This credential has no enabled run-as Administrator"}}}},"IdempotencyKeyRequired":{"description":"The write has no Idempotency-Key header of 1 to 255 characters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"idempotency_key_required","error_description":"A write needs an Idempotency-Key header of 1 to 255 characters"}}}},"IdempotencyKeyReused":{"description":"The Idempotency-Key was used in the last 24 hours for a different method, path or body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"idempotency_key_reused","error_description":"This Idempotency-Key was used for a different request"}}}},"IdempotencyInProgress":{"description":"The first request with this Idempotency-Key has not finished. Nothing was written; retry after the given seconds.","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"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"}}}},"PreconditionFailed":{"description":"If-Match is missing, malformed or not the record’s current lock_version, or the record changed under the write. Nothing was written.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"precondition_failed","error_description":"If-Match must carry the record’s current lock_version"}}}},"UnknownField":{"description":"The body has a property the route does not document; the first is named.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"unknown_field","error_description":"bank_account_number is not a writable field"}}}},"UnknownTag":{"description":"A tag is not one of the Organisation’s tags. None is created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"unknown_tag","error_description":"urgent is not a tag of this Organisation"}}}},"InvalidTransition":{"description":"The move is not open from where the record stands; `current_status` says where that is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_transition","error_description":"The record cannot make this move from approved","current_status":"approved"}}}},"ConflictDeclared":{"description":"The Assessor has declared a conflict of interest with an application.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"conflict_declared","error_description":"The Assessor has declared a conflict of interest"}}}},"InvalidState":{"description":"The record is not in a state that admits this write.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_state","error_description":"The target does not take files in its current state"}}}},"ModuleDisabled":{"description":"The Organisation has the module this route belongs to turned off.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"module_disabled","error_description":"This module is not enabled for the Organisation"}}}},"ApprovalLimitExceeded":{"description":"The amount is above the run-as Administrator’s approval limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"approval_limit_exceeded","error_description":"The amount is above the run-as Administrator’s approval limit"}}}},"FileInfected":{"description":"The file failed its malware scan and was not attached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"file_infected","error_description":"The file failed its malware scan"}}}},"FileNotScanned":{"description":"The file has not finished its malware scan; try the attach again shortly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"file_not_scanned","error_description":"The file has not finished its malware scan"}}}},"PayloadTooLarge":{"description":"The body, or the declared file, is larger than the limit that applies.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"payload_too_large","error_description":"The request body is too large"}}}},"UnsupportedMediaType":{"description":"The body is not application/json, or the target does not accept the file’s content type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"unsupported_media_type","error_description":"The request body must be application/json"}}}},"ValidationFailed":{"description":"Body values the product’s own form would refuse; `fields` names each.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"validation_failed","error_description":"Invalid fields: due_date","fields":["due_date"]}}}}},"examples":{"invalid_request":{"summary":"A query parameter is invalid, or a write’s body is not a JSON object.","value":{"error":"invalid_request","error_description":"limit is invalid"}},"unsupported_grant_type":{"summary":"The grant type is not client_credentials.","value":{"error":"unsupported_grant_type","error_description":"Only client_credentials is supported"}},"invalid_client":{"summary":"Client authentication failed: an unknown client_id, a wrong secret, a revoked credential or another Organisation’s, or API access is not Full.","value":{"error":"invalid_client","error_description":"Client authentication failed"}},"invalid_token":{"summary":"The token is missing, invalid, expired or revoked, of another Organisation, or API access is not Full. Ask for a new token.","value":{"error":"invalid_token","error_description":"The access token is invalid or has expired"}},"https_required":{"summary":"The request was sent over plain HTTP and was not processed.","value":{"error":"https_required"}},"not_found":{"summary":"An unknown host or path, or an id that is unknown, deleted or of another Organisation.","value":{"error":"not_found"}},"method_not_allowed":{"summary":"The method is not served on this path. `Allow` lists what is: `GET, HEAD` on a read path, `POST` on /oauth/token, the write’s own method on a write path.","value":{"error":"method_not_allowed"}},"rate_limited":{"summary":"A rate limit was exceeded: 120 requests a minute per credential, 30 token requests a minute per client_id.","value":{"error":"rate_limited","error_description":"Too many requests"}},"server_error":{"summary":"An unexpected server error.","value":{"error":"server_error"}},"temporarily_unavailable":{"summary":"The Organisation’s API access cannot be determined, or a dependency is unavailable. Retry after the given seconds.","value":{"error":"temporarily_unavailable"}},"insufficient_scope":{"summary":"The credential does not hold the scope the route needs.","value":{"error":"insufficient_scope","error_description":"This credential lacks the write:applications scope"}},"forbidden":{"summary":"The run-as Administrator lacks the permission, or the record is outside their Data Access Rules.","value":{"error":"forbidden","error_description":"The run-as Administrator may not do this to this record"}},"run_as_disabled":{"summary":"The credential has no run-as Administrator, or that person is no longer one.","value":{"error":"run_as_disabled","error_description":"This credential has no enabled run-as Administrator"}},"idempotency_key_required":{"summary":"The write has no Idempotency-Key header of 1 to 255 characters.","value":{"error":"idempotency_key_required","error_description":"A write needs an Idempotency-Key header of 1 to 255 characters"}},"idempotency_key_reused":{"summary":"The Idempotency-Key was used in the last 24 hours for a different method, path or body.","value":{"error":"idempotency_key_reused","error_description":"This Idempotency-Key was used for a different request"}},"idempotency_in_progress":{"summary":"The first request with this Idempotency-Key has not finished. Nothing was written; retry after the given seconds.","value":{"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"}},"precondition_failed":{"summary":"If-Match is missing, malformed or not the record’s current lock_version, or the record changed under the write. Nothing was written.","value":{"error":"precondition_failed","error_description":"If-Match must carry the record’s current lock_version"}},"unknown_field":{"summary":"The body has a property the route does not document; the first is named.","value":{"error":"unknown_field","error_description":"bank_account_number is not a writable field"}},"unknown_tag":{"summary":"A tag is not one of the Organisation’s tags. None is created.","value":{"error":"unknown_tag","error_description":"urgent is not a tag of this Organisation"}},"invalid_transition":{"summary":"The move is not open from where the record stands; `current_status` says where that is.","value":{"error":"invalid_transition","error_description":"The record cannot make this move from approved","current_status":"approved"}},"conflict_declared":{"summary":"The Assessor has declared a conflict of interest with an application.","value":{"error":"conflict_declared","error_description":"The Assessor has declared a conflict of interest"}},"invalid_state":{"summary":"The record is not in a state that admits this write.","value":{"error":"invalid_state","error_description":"The target does not take files in its current state"}},"module_disabled":{"summary":"The Organisation has the module this route belongs to turned off.","value":{"error":"module_disabled","error_description":"This module is not enabled for the Organisation"}},"approval_limit_exceeded":{"summary":"The amount is above the run-as Administrator’s approval limit.","value":{"error":"approval_limit_exceeded","error_description":"The amount is above the run-as Administrator’s approval limit"}},"file_infected":{"summary":"The file failed its malware scan and was not attached.","value":{"error":"file_infected","error_description":"The file failed its malware scan"}},"file_not_scanned":{"summary":"The file has not finished its malware scan; try the attach again shortly.","value":{"error":"file_not_scanned","error_description":"The file has not finished its malware scan"}},"payload_too_large":{"summary":"The body, or the declared file, is larger than the limit that applies.","value":{"error":"payload_too_large","error_description":"The request body is too large"}},"unsupported_media_type":{"summary":"The body is not application/json, or the target does not accept the file’s content type.","value":{"error":"unsupported_media_type","error_description":"The request body must be application/json"}},"validation_failed":{"summary":"Body values the product’s own form would refuse; `fields` names each.","value":{"error":"validation_failed","error_description":"Invalid fields: due_date","fields":["due_date"]}},"missing_parameter":{"summary":"A query parameter is invalid, or a write’s body is not a JSON object.","value":{"error":"invalid_request","error_description":"Missing required parameter: grant_type"}},"invalid_body":{"summary":"A query parameter is invalid, or a write’s body is not a JSON object.","value":{"error":"invalid_request","error_description":"The body must be a JSON object"}}},"schemas":{"ApplicationNote":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"body":{"type":"string"},"author_label":{"type":"string"},"created_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"}},"required":["id","body","author_label","created_at"],"additionalProperties":false,"description":"The note as kept. `author_label` is `API: <credential name> as <run-as Administrator>`.","examples":[{"id":7781,"body":"Budget checked against the supplier quote.","author_label":"API: Finance sync as Mere Tane","created_at":"2026-05-20T04:12:55.000Z"}]},"ApplicationNoteCreate":{"type":"object","properties":{"body":{"type":"string","minLength":1,"maxLength":10000}},"required":["body"],"additionalProperties":false,"description":"The note’s text, kept on the application as an Internal Comment.","examples":[{"body":"Budget checked against the supplier quote."}]},"ApplicationTags":{"type":"object","properties":{"tags":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1}}},"required":["tags"],"additionalProperties":false,"description":"The application’s hand-set tags, each an existing tag of the Organisation. Answered lower-cased and sorted.","examples":[{"tags":["priority","rural"]}]},"ApplicationTransition":{"type":"object","properties":{"transition":{"type":"string","enum":["withdraw","unlock","request_more_information","allow_edit_request","decline_edit_request","release_from_verifier"]},"lock_version":{"type":"integer","minimum":0,"maximum":9007199254740991},"message":{"type":"string"},"deadline":{"type":"string"},"form_template_id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"edit_request_id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["transition"],"additionalProperties":false,"description":"One of the Administrator’s record moves, with its parameters: `unlock` takes `message` and `deadline`, `request_more_information` `form_template_id`, the edit-request decisions `edit_request_id`. An unlock’s `deadline` is a future UTC timestamp with milliseconds (`2027-06-07T11:59:00.000Z`), the moment the editing window closes by itself; a date alone, or a moment already past, is 422 `validation_failed`.","examples":[{"transition":"unlock","message":"Please attach the updated budget.","deadline":"2027-06-07T11:59:00.000Z"}]},"AssessorAssignment":{"type":"object","properties":{"assessment_round_id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"assessor_user_id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"round_status":{"type":"string","enum":["draft","published"]},"funding_application_ids":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"notified":{"type":"boolean"}},"required":["assessment_round_id","assessor_user_id","round_status","funding_application_ids","notified"],"additionalProperties":false,"description":"What the Assessor now holds in the round.","examples":[{"assessment_round_id":88,"assessor_user_id":5100,"round_status":"published","funding_application_ids":[1287,1288],"notified":true}]},"AssessorAssignmentCreate":{"type":"object","properties":{"assessor_user_id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"funding_application_ids":{"minItems":1,"maxItems":500,"type":"array","items":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"notify":{"type":"boolean"}},"required":["assessor_user_id","funding_application_ids"],"additionalProperties":false,"description":"One Assessor given applications of the assessment round. `notify` (a Published round only) runs `Notify Assessors`.","examples":[{"assessor_user_id":5100,"funding_application_ids":[1287,1288],"notify":true}]},"Contract":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"created_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"updated_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"title":{"type":"string"},"amount":{"type":["string","null"],"pattern":"^-?\\d+\\.\\d*[1-9]$|^-?\\d+\\.0$"},"contract_start_date":{"type":["string","null"],"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"contract_end_date":{"type":["string","null"],"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"state":{"type":"string","enum":["draft","sent","partially_signed","declined","signed","completed","withdrawing","withdrawn","terminating","terminated"]},"contract_type":{"type":"string","enum":["standard","variation"]},"registration_entity":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"lock_version":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["id","created_at","updated_at","title","amount","contract_start_date","contract_end_date","state","contract_type","registration_entity","lock_version"],"additionalProperties":false,"description":"A contract. Dates are `YYYY-MM-DD`; `amount` and the dates are null on a draft.","examples":[{"id":640,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","title":"Funding agreement: Te Awa river restoration","amount":"24500.0","contract_start_date":"2026-08-01","contract_end_date":"2027-07-31","state":"signed","contract_type":"standard","registration_entity":{"id":311,"name":"Te Awa Restoration Trust"},"lock_version":1}]},"ContractStatusChange":{"type":"object","properties":{"status":{"type":"string"},"reason":{"type":"string","maxLength":5000}},"required":["status"],"additionalProperties":false,"description":"The status to record: `executed` (the Administrator’s counter-signature) or `terminated` (with a `reason`). Any other value is 409 `invalid_transition`.","examples":[{"status":"executed"}]},"Error":{"type":"object","properties":{"error":{"type":"string","enum":["invalid_request","unsupported_grant_type","invalid_client","invalid_token","https_required","not_found","method_not_allowed","rate_limited","server_error","temporarily_unavailable","insufficient_scope","forbidden","run_as_disabled","idempotency_key_required","idempotency_key_reused","idempotency_in_progress","precondition_failed","unknown_field","unknown_tag","invalid_transition","conflict_declared","invalid_state","module_disabled","approval_limit_exceeded","file_infected","file_not_scanned","payload_too_large","unsupported_media_type","validation_failed"]},"error_description":{"type":"string","minLength":1},"current_status":{"type":"string","minLength":1},"fields":{"minItems":1,"type":"array","items":{"type":"string","minLength":1}}},"required":["error"],"additionalProperties":false,"description":"Every refusal: `error`, a machine code a client switches on, and `error_description` where the code gives a fixed English text. `current_status` is `invalid_transition`’s alone, `fields` `validation_failed`’s alone.","examples":[{"error":"not_found"}]},"FileAttached":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"state":{"type":"string","const":"attached"},"target":{"type":"object","properties":{"type":{"type":"string","enum":["milestone_deliverable","application_note","registration_entity"]},"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"field":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["type","id"],"additionalProperties":false}},"required":["id","state","target"],"additionalProperties":false,"description":"The clean file, now a File Attachment on its target.","examples":[{"id":99120,"state":"attached","target":{"type":"milestone_deliverable","id":2210,"field":950}}]},"FileConfirmed":{"type":"object","properties":{"id":{"type":"string"},"state":{"type":"string","const":"scanning"}},"required":["id","state"],"additionalProperties":false,"description":"The upload is stored and its malware scan has begun.","examples":[{"id":"upl_3Jq9xVb2LmT8sKp4Rz7Wn1Ye","state":"scanning"}]},"FileUploadRequest":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":150},"content_type":{"type":"string","minLength":3,"maxLength":255,"pattern":"^[A-Za-z0-9][A-Za-z0-9!#$&^_.+-]*\\/[A-Za-z0-9][A-Za-z0-9!#$&^_.+-]*( *;[^\\u0000-\\u001f\\u007f]*)?$"},"size":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"target":{"type":"object","properties":{"type":{"type":"string","enum":["milestone_deliverable","application_note","registration_entity"]},"id":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"string","pattern":"^(0|[1-9]\\d*)$"}]},"field":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"string","pattern":"^(0|[1-9]\\d*)$"}]}},"required":["type","id"],"additionalProperties":false}},"required":["filename","content_type","size","target"],"additionalProperties":false,"description":"The file to reserve and where it goes: a milestone deliverable (with its File upload `field`), an application note or a registration entity.","examples":[{"filename":"final-report.pdf","content_type":"application/pdf","size":482113,"target":{"type":"milestone_deliverable","id":2210,"field":950}}]},"FileUploadReserved":{"type":"object","properties":{"id":{"type":"string"},"upload":{"type":"object","properties":{"url":{"type":"string"},"method":{"type":"string","enum":["POST","PUT"]},"fields":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"headers":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["url","method","fields","headers"],"additionalProperties":false},"expires_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"max_bytes":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"state":{"type":"string","const":"awaiting_upload"}},"required":["id","upload","expires_at","max_bytes","state"],"additionalProperties":false,"description":"The opaque upload `id` and a presigned upload valid 15 minutes: `POST` a multipart form of `fields` (in order) with the file part last and named `file`, or `PUT` the bytes with `headers`.","examples":[{"id":"upl_3Jq9xVb2LmT8sKp4Rz7Wn1Ye","upload":{"url":"https://uploads.example.com/backed","method":"POST","fields":{"key":"tmp/2026/11/09/3f0c9d1e","policy":"eyJleHBpcmF0aW9uIjoi...","x-amz-signature":"9c1f4e..."},"headers":{}},"expires_at":"2026-11-09T02:45:00.000Z","max_bytes":104857600,"state":"awaiting_upload"}]},"FundingApplication":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"created_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"updated_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"funding_round_id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"state":{"type":"string"},"title":{"type":["string","null"]},"submitted_at":{"type":["string","null"],"pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"funding_category":{"type":["object","null"],"properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"registration_entity":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"lock_version":{"type":"integer","minimum":0,"maximum":9007199254740991},"requested_amount":{"type":["string","null"],"pattern":"^-?\\d+\\.\\d*[1-9]$|^-?\\d+\\.0$"},"recommended_amount":{"type":["string","null"],"pattern":"^-?\\d+\\.\\d*[1-9]$|^-?\\d+\\.0$"},"bank_account_number":{"type":["string","null"]},"registration_entity_id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["id","created_at","updated_at","funding_round_id","state","title","submitted_at","funding_category","registration_entity","lock_version"],"additionalProperties":false,"description":"A funding application as the list answers it. `requested_amount`, `recommended_amount`, `bank_account_number` and `registration_entity_id` are present only when named in `extra_methods[]`.","examples":[{"id":1287,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","funding_round_id":42,"state":"submitted","title":"Te Awa river restoration","submitted_at":"2026-05-20T04:12:55.000Z","funding_category":{"id":7,"name":"Community"},"registration_entity":{"id":311,"name":"Te Awa Restoration Trust"},"lock_version":3,"requested_amount":"24500.0"}]},"FundingApplicationDetail":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"created_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"updated_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"funding_round_id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"state":{"type":"string"},"title":{"type":["string","null"]},"submitted_at":{"type":["string","null"],"pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"funding_category":{"type":["object","null"],"properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"registration_entity":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"lock_version":{"type":"integer","minimum":0,"maximum":9007199254740991},"requested_amount":{"type":["string","null"],"pattern":"^-?\\d+\\.\\d*[1-9]$|^-?\\d+\\.0$"},"recommended_amount":{"type":["string","null"],"pattern":"^-?\\d+\\.\\d*[1-9]$|^-?\\d+\\.0$"},"bank_account_number":{"type":["string","null"]},"registration_entity_id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"entry":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"created_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"updated_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"inputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"value":{"type":["string","null"]},"input_group_id":{"type":["integer","null"],"exclusiveMinimum":0,"maximum":9007199254740991},"input_group_order":{"type":["integer","null"],"minimum":0,"maximum":9007199254740991},"field":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"internal_identifier":{"type":"string"},"name":{"type":"string"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","internal_identifier","name","order"],"additionalProperties":false},"file":{"type":["object","null"],"properties":{"filename":{"type":"string"},"content_type":{"type":"string"},"byte_size":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["filename","content_type","byte_size"],"additionalProperties":false},"tahua_file_url":{"type":["string","null"],"pattern":"^https:\\/\\/[^/?#\\s]+\\/api\\/v2\\/file_inputs\\/[1-9]\\d*$"}},"required":["id","value","input_group_id","input_group_order","field","file","tahua_file_url"],"additionalProperties":false}}},"required":["id","created_at","updated_at","inputs"],"additionalProperties":false}},"required":["id","created_at","updated_at","funding_round_id","state","title","submitted_at","funding_category","registration_entity","lock_version","entry"],"additionalProperties":false,"description":"A funding application with its form entry: one input per answer, Table cell and repeatable-section field. `field.id` is the stable key of an answer; `tahua_file_url` downloads a file answer.","examples":[{"id":1287,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","funding_round_id":42,"state":"submitted","title":"Te Awa river restoration","submitted_at":"2026-05-20T04:12:55.000Z","funding_category":{"id":7,"name":"Community"},"registration_entity":{"id":311,"name":"Te Awa Restoration Trust"},"lock_version":3,"requested_amount":"24500.0","entry":{"id":9001,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-05-20T04:12:55.000Z","inputs":[{"id":55120,"value":"Te Awa river restoration","input_group_id":null,"input_group_order":null,"field":{"id":801,"internal_identifier":"project_title","name":"Project title","order":1},"file":null,"tahua_file_url":null},{"id":55121,"value":"budget.pdf","input_group_id":null,"input_group_order":null,"field":{"id":802,"internal_identifier":"budget","name":"Budget","order":2},"file":{"filename":"budget.pdf","content_type":"application/pdf","byte_size":182044},"tahua_file_url":"https://your-org.backed.giving/api/v2/file_inputs/55121"}]}}]},"FundingRound":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"created_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"updated_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"name":{"type":"string"},"description":{"type":["string","null"]},"start_date":{"type":["string","null"],"pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"ent_date":{"type":["string","null"],"pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"total_funding":{"type":["string","null"],"pattern":"^-?\\d+\\.\\d*[1-9]$|^-?\\d+\\.0$"},"funding_amount_per_application":{"type":["string","null"],"pattern":"^-?\\d+\\.\\d*[1-9]$|^-?\\d+\\.0$"},"category":{"type":["string","null"]},"round_number":{"type":["integer","null"],"minimum":-9007199254740991,"maximum":9007199254740991},"phase":{"type":["string","null"]},"phase_parent_id":{"type":["integer","null"],"exclusiveMinimum":0,"maximum":9007199254740991},"is_private":{"type":"boolean"},"is_continuous":{"type":"boolean"},"archived":{"type":"boolean"},"published_at":{"type":["string","null"],"pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"board_hui_date":{"type":["string","null"],"pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"board_notifications":{"type":["string","null"]},"letter_of_offer_deadline_date":{"type":["string","null"],"pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"grace_period_in_minutes":{"type":["integer","null"],"minimum":0,"maximum":9007199254740991},"cloned_from_id":{"type":["integer","null"],"exclusiveMinimum":0,"maximum":9007199254740991},"group":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"funding_category":{"type":["object","null"],"properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"programme":{"type":["object","null"],"properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false}},"required":["id","created_at","updated_at","name","description","start_date","ent_date","total_funding","funding_amount_per_application","category","round_number","phase","phase_parent_id","is_private","is_continuous","archived","published_at","board_hui_date","board_notifications","letter_of_offer_deadline_date","grace_period_in_minutes","cloned_from_id","group","funding_category","programme"],"additionalProperties":false,"description":"A funding round. Every property is always present, `null` when unset; `ent_date` is the round’s end date, spelt as the documented product spells it.","examples":[{"id":42,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","name":"Community Grants 2026 Round 1","description":"Grants of up to $25,000 for community-led projects.","start_date":"2026-04-01T00:00:00.000Z","ent_date":"2026-05-31T11:59:00.000Z","total_funding":"500000.0","funding_amount_per_application":"25000.0","category":"Community","round_number":1,"phase":null,"phase_parent_id":null,"is_private":false,"is_continuous":false,"archived":false,"published_at":"2026-03-20T22:00:00.000Z","board_hui_date":"2026-07-14T00:00:00.000Z","board_notifications":null,"letter_of_offer_deadline_date":null,"grace_period_in_minutes":15,"cloned_from_id":null,"group":{"id":3,"name":"Community Grants"},"funding_category":{"id":7,"name":"Community"},"programme":{"id":2,"name":"Community Investment"}}]},"Milestone":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"created_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"updated_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"title":{"type":"string"},"contract_id":{"type":["integer","null"],"exclusiveMinimum":0,"maximum":9007199254740991},"funding_amount":{"type":"string","pattern":"^-?\\d+\\.\\d*[1-9]$|^-?\\d+\\.0$"},"description":{"type":["string","null"]},"state":{"type":"string","enum":["not_submitted","pending_review","submitted_to_verifier","submitted","resubmission_requested","approved","finance_approved"]},"paid_at":{"type":["string","null"],"pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"decline_reason":{"type":["string","null"]},"due_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"contract":{"type":["object","null"],"properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"title":{"type":"string"}},"required":["id","title"],"additionalProperties":false},"lock_version":{"type":"integer","minimum":0,"maximum":9007199254740991},"deliverables_template_entry":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"created_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"updated_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"inputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"created_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"updated_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"value":{"type":["string","null"]},"file":{"type":["object","null"],"properties":{"filename":{"type":"string"},"content_type":{"type":"string"},"byte_size":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["filename","content_type","byte_size"],"additionalProperties":false},"tahua_file_url":{"type":["string","null"],"pattern":"^https:\\/\\/[^/?#\\s]+\\/api\\/v2\\/file_inputs\\/[1-9]\\d*$"},"field":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"created_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"updated_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"internal_identifier":{"type":"string"}},"required":["id","created_at","updated_at","internal_identifier"],"additionalProperties":false}},"required":["id","created_at","updated_at","value","file","tahua_file_url","field"],"additionalProperties":false}}},"required":["id","created_at","updated_at","inputs"],"additionalProperties":false}},"required":["id","created_at","updated_at","title","contract_id","funding_amount","description","state","paid_at","decline_reason","due_date","contract","lock_version","deliverables_template_entry"],"additionalProperties":false,"description":"A milestone with its deliverables entry. `contract_id` and `contract` are null for an application or standalone milestone; `due_date` is `YYYY-MM-DD`.","examples":[{"id":2210,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","title":"Final report","contract_id":640,"funding_amount":"4500.0","description":"A report on the outcomes the project achieved.","state":"submitted","paid_at":null,"decline_reason":null,"due_date":"2027-06-30","contract":{"id":640,"title":"Funding agreement: Te Awa river restoration"},"lock_version":2,"deliverables_template_entry":{"id":9310,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","inputs":[{"id":77001,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-06-18T03:40:11.000Z","value":"final-report.pdf","file":{"filename":"final-report.pdf","content_type":"application/pdf","byte_size":482113},"tahua_file_url":"https://your-org.backed.giving/api/v2/file_inputs/77001","field":{"id":950,"created_at":"2026-03-02T21:15:04.000Z","updated_at":"2026-03-02T21:15:04.000Z","internal_identifier":"report"}}]}}]},"MilestoneCreate":{"type":"object","properties":{"funding_application_id":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"title":{"type":"string","minLength":1,"maxLength":255},"due_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"amount":{"type":"string","pattern":"^-?\\d+\\.\\d{2}$"},"form_template_id":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"milestone_template_id":{"type":["string","null"],"pattern":"^(0|[1-9]\\d*)$"},"description":{"type":["string","null"],"maxLength":50000},"reviewer_user_ids":{"maxItems":50,"type":"array","items":{"type":"string","pattern":"^(0|[1-9]\\d*)$"}}},"required":["funding_application_id","title","due_date","amount","form_template_id"],"additionalProperties":false,"description":"A milestone on one funding application, with its deliverables form. Ids are decimal strings and `amount` has two decimal places, as the product’s form takes them.","examples":[{"funding_application_id":"1287","title":"Progress report","due_date":"2026-12-15","amount":"5000.00","form_template_id":"61","description":"A six-month progress report."}]},"PaymentMarkPaid":{"type":"object","properties":{"paid_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"reference":{"type":"string","minLength":1,"maxLength":255}},"required":["paid_date","reference"],"additionalProperties":false,"description":"`Mark as Paid` on a payment batch: the Paid Date and the bank reference.","examples":[{"paid_date":"2026-11-09","reference":"BNZ-20261109-0042"}]},"PaymentMarkedPaid":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"status":{"type":"string","const":"paid"},"marked_paid_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"paid_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"reference":{"type":"string"},"payment_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"amount_total":{"type":"string","pattern":"^-?\\d+\\.\\d*[1-9]$|^-?\\d+\\.0$"}},"required":["id","status","marked_paid_at","paid_date","reference","payment_count","amount_total"],"additionalProperties":false,"description":"The batch as the mark left it, and how many payments this request marked.","examples":[{"id":315,"status":"paid","marked_paid_at":"2026-11-09T02:30:00.000Z","paid_date":"2026-11-09","reference":"BNZ-20261109-0042","payment_count":12,"amount_total":"182500.0"}]},"RegistrationEntity":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"created_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"updated_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"name":{"type":"string"},"registration_type":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"lock_version":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["id","created_at","updated_at","name","registration_type","lock_version"],"additionalProperties":false,"description":"An applicant organisation or individual registered with the Organisation. The list carries no users.","examples":[{"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}]},"RegistrationEntityCreate":{"type":"object","properties":{"registration_type_id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"entity_name":{"type":"string","maxLength":255},"first_name":{"type":"string","minLength":1,"maxLength":100},"last_name":{"type":"string","minLength":1,"maxLength":100},"email":{"type":"string","maxLength":200,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"invite":{"type":"boolean"}},"required":["registration_type_id","first_name","last_name","email"],"additionalProperties":false,"description":"`Add Applicant`: the Registration Type, the person, and for an organisation the entity’s name. `invite` sends the applicant invitation (default false).","examples":[{"registration_type_id":2,"entity_name":"Te Awa Restoration Trust","first_name":"Aroha","last_name":"Ngata","email":"aroha@example.org","invite":true}]},"RegistrationEntityDetail":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"created_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"updated_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"name":{"type":"string"},"registration_type":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"lock_version":{"type":"integer","minimum":0,"maximum":9007199254740991},"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"email":{"type":"string"},"first_name":{"type":["string","null"]},"last_name":{"type":["string","null"]}},"required":["id","email","first_name","last_name"],"additionalProperties":false}}},"required":["id","created_at","updated_at","name","registration_type","lock_version","users"],"additionalProperties":false,"description":"A registration entity with its users: the account owner first, then the other members by ascending id.","examples":[{"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"}]}]},"RegistrationEntityMembership":{"type":"object","properties":{"registration_entity_id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"user_id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"email":{"type":"string"},"invited":{"type":"boolean"}},"required":["registration_entity_id","user_id","email","invited"],"additionalProperties":false,"description":"The person now a member of the entity. `invited` is true when the applicant invitation was sent.","examples":[{"registration_entity_id":311,"user_id":5013,"email":"rawiri@example.org","invited":true}]},"RegistrationEntityUpdate":{"type":"object","properties":{"founded_on":{"type":["string","null"],"format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"stage_override":{"type":["string","null"],"enum":["seed","early","growth","advanced",null]},"stage_override_reason":{"type":["string","null"],"maxLength":500}},"additionalProperties":false,"description":"An organisation’s `Founded` date and stage override. Only the properties sent change.","examples":[{"founded_on":"2014-03-01","stage_override":"growth","stage_override_reason":"Confirmed by the 2025 annual report."}]},"RegistrationEntityUserCreate":{"type":"object","properties":{"email":{"type":"string","maxLength":200,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"first_name":{"type":"string","minLength":1,"maxLength":100},"last_name":{"type":"string","minLength":1,"maxLength":100}},"required":["email","first_name","last_name"],"additionalProperties":false,"description":"`Invite Applicant`: an existing person of the Organisation is attached; a new address is sent the applicant invitation.","examples":[{"email":"rawiri@example.org","first_name":"Rawiri","last_name":"Ngata"}]},"TokenResponse":{"type":"object","properties":{"access_token":{"type":"string","pattern":"^[A-Za-z0-9_-]{43}$"},"token_type":{"type":"string","const":"Bearer"},"expires_in":{"type":"number","const":432000},"created_at":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["access_token","token_type","expires_in","created_at"],"additionalProperties":false,"description":"A Bearer access token, valid 432000 seconds (5 days). No refresh token: ask for a new token when a request answers 401.","examples":[{"access_token":"q3Vx9LmT2sKp4Rz7Wn1YeB8cD5fG6hJ0kN_aQ-uIoPr","token_type":"Bearer","expires_in":432000,"created_at":1762650000}]},"WebhookDeliveryPayload":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","maxLength":200,"pattern":"^[a-z][a-z0-9_]*(\\.[a-z][a-z0-9_]*)+$"},"version":{"type":"integer","minimum":1,"maximum":9007199254740991},"occurred_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"organisation":{"type":"string","pattern":"^(0|[1-9]\\d*)$"},"data":{"type":"object","properties":{"record_type":{"type":"string"},"record_id":{"type":"string"},"url":{"type":["string","null"]}},"required":["record_type","record_id","url"],"additionalProperties":false}},"required":["id","type","version","occurred_at","organisation","data"],"additionalProperties":false,"description":"The body of a webhook delivery: the event, the Organisation, and the record it is about with its read-API URL. Never a form answer, a bank detail or personal data.","examples":[{"id":"918273","type":"rounds.funding_round.published","version":1,"occurred_at":"2026-11-09T01:00:00.000Z","organisation":"17","data":{"record_type":"funding_round","record_id":"42","url":"https://your-org.backed.giving/api/v2/funding_rounds/42"}}]},"TokenRequest":{"type":"object","required":["grant_type"],"description":"`client_id` and `client_secret` are required unless sent with HTTP Basic authentication.","properties":{"grant_type":{"type":"string","const":"client_credentials"},"client_id":{"type":"string","description":"Your Client ID"},"client_secret":{"type":"string","description":"Your Client Secret"}},"examples":[{"grant_type":"client_credentials","client_id":"your-client-id","client_secret":"your-client-secret"}]}}},"x-path-alias-prefix":"/funding_system/api/v2","x-unsupported-method-response":"#/components/responses/MethodNotAllowed","x-changelog":[{"date":"2026-11-09","version":"v2","title":"OpenAPI document and developer site","summary":"Every Organisation host serves this OpenAPI 3.1 document at /api/v2/openapi.json, and the developer site at https://backed.giving/developers publishes the reference, the guides, the event catalogue and this changelog.","breaking":false},{"date":"2026-11-09","version":"v2","title":"Plain HTTP refused","summary":"A request that reaches the API over plain HTTP is answered 403 https_required and is not processed, on every route, the token endpoint included.","breaking":false},{"date":"2026-11-09","version":"v2","title":"Webhooks and the OData reporting feed","summary":"Signed webhook deliveries of the event catalogue to the Organisation's endpoints, and the OData v4 feed at /odata/v4 for Power BI, Tableau and warehouse loaders (scope read:reporting_feed).","breaking":false},{"date":"2026-11-07","version":"v2","title":"Write API","summary":"Registration entities, application transitions, notes and tags, assessor assignments, milestones, payment batches, contract statuses and file uploads, each under a write scope and an Idempotency-Key, run as the credential’s Administrator.","breaking":false},{"date":"2026-10-29","version":"v2","title":"Milestones","summary":"GET /api/v2/milestones and /api/v2/milestones/{id}, with each Milestone’s deliverables entry and the filters[…] parameters.","breaking":false},{"date":"2026-10-22","version":"v2","title":"Registration entities","summary":"GET /api/v2/registration_entities and /api/v2/registration_entities/{id}; the single record carries its users.","breaking":false},{"date":"2026-10-12","version":"v2","title":"Contracts","summary":"GET /api/v2/contracts and /api/v2/contracts/{id}.","breaking":false},{"date":"2026-10-01","version":"v2","title":"Funding rounds, funding applications and file inputs","summary":"The read-only v2 resources: GET /api/v2/funding_rounds, /api/v2/funding_applications (with extra_methods[]) and their single records, and the file download GET /api/v2/file_inputs/{id}.","breaking":false},{"date":"2026-09-30","version":"v2","title":"Token endpoint","summary":"POST /oauth/token issues 5-day Bearer tokens by the OAuth 2.0 client-credentials grant.","breaking":false}],"x-webhook-events":[{"type":"applications.collaborator.added","version":1,"aggregateType":"funding_application","description":"Collaborator added."},{"type":"applications.collaborator.invitation_completed","version":1,"aggregateType":"funding_application","description":"Collaborator invitation completed."},{"type":"applications.collaborator.invited","version":1,"aggregateType":"funding_application","description":"Collaborator invited."},{"type":"applications.collaborator.removed","version":1,"aggregateType":"funding_application","description":"Collaborator removed."},{"type":"applications.duplicate_group.detected","version":1,"aggregateType":"duplicate_group","description":"Duplicate group detected."},{"type":"applications.duplicate_group.resolved","version":1,"aggregateType":"duplicate_group","description":"Duplicate group resolved."},{"type":"applications.eligibility_screening.decided","version":1,"aggregateType":"eligibility_screening","description":"Eligibility screening decided."},{"type":"applications.eligibility_screening.retake_allowed","version":1,"aggregateType":"eligibility_screening","description":"Eligibility screening retake allowed."},{"type":"applications.eligibility_screening.submitted","version":1,"aggregateType":"eligibility_screening","description":"Eligibility screening submitted."},{"type":"applications.funding_application.approved","version":1,"aggregateType":"funding_application","description":"Funding application approved."},{"type":"applications.funding_application.copied","version":1,"aggregateType":"funding_application","description":"Funding application copied."},{"type":"applications.funding_application.decided","version":1,"aggregateType":"funding_application","description":"Funding application decided."},{"type":"applications.funding_application.decision_revoked","version":1,"aggregateType":"funding_application","description":"Funding application decision revoked."},{"type":"applications.funding_application.edit_request_approved","version":1,"aggregateType":"funding_application","description":"Funding application edit request approved."},{"type":"applications.funding_application.edit_request_declined","version":1,"aggregateType":"funding_application","description":"Funding application edit request declined."},{"type":"applications.funding_application.edit_request_withdrawn","version":1,"aggregateType":"funding_application","description":"Funding application edit request withdrawn."},{"type":"applications.funding_application.edit_requested","version":1,"aggregateType":"funding_application","description":"Funding application edit requested."},{"type":"applications.funding_application.eligibility_set","version":1,"aggregateType":"funding_application","description":"Funding application eligibility set."},{"type":"applications.funding_application.information_request_closed","version":1,"aggregateType":"funding_application","description":"Funding application information request closed."},{"type":"applications.funding_application.information_request_reminded","version":1,"aggregateType":"funding_application","description":"Funding application information request reminded."},{"type":"applications.funding_application.information_requested","version":1,"aggregateType":"funding_application","description":"Funding application information requested."},{"type":"applications.funding_application.location_inputs_changed","version":1,"aggregateType":"funding_application","description":"Funding application location inputs changed."},{"type":"applications.funding_application.offer_answered","version":1,"aggregateType":"funding_application","description":"Funding application offer answered."},{"type":"applications.funding_application.payment_status_changed","version":1,"aggregateType":"funding_application","description":"Funding application payment status changed."},{"type":"applications.funding_application.stale_draft_reminded","version":1,"aggregateType":"funding_application","description":"Funding application stale draft reminded."},{"type":"applications.funding_application.started","version":1,"aggregateType":"funding_application","description":"Funding application started."},{"type":"applications.funding_application.submitted","version":1,"aggregateType":"funding_application","description":"Funding application submitted."},{"type":"applications.funding_application.submitted_to_verifier","version":1,"aggregateType":"funding_application","description":"Funding application submitted to verifier."},{"type":"applications.funding_application.tagged_answers_changed","version":1,"aggregateType":"funding_application","description":"Funding application tagged answers changed."},{"type":"applications.funding_application.unlocked","version":1,"aggregateType":"funding_application","description":"Funding application unlocked."},{"type":"applications.funding_application.verifier_assigned","version":1,"aggregateType":"funding_application","description":"Funding application verifier assigned."},{"type":"applications.funding_application.withdrawal_countdown_cancelled","version":1,"aggregateType":"funding_application","description":"Funding application withdrawal countdown cancelled."},{"type":"applications.funding_application.withdrawn","version":1,"aggregateType":"funding_application","description":"Funding application withdrawn."},{"type":"applications.late_access.granted","version":1,"aggregateType":"late_access_grant","description":"Late access granted."},{"type":"applications.referee_request.completed","version":1,"aggregateType":"referee_request","description":"Referee request completed."},{"type":"applications.referee_request.declined","version":1,"aggregateType":"referee_request","description":"Referee request declined."},{"type":"applications.referee_request.expired","version":1,"aggregateType":"referee_request","description":"Referee request expired."},{"type":"assessments.assessment.acceptance_reminder_due","version":1,"aggregateType":"assessment","description":"Assessment acceptance reminder due."},{"type":"assessments.assessment.assigned","version":1,"aggregateType":"assessment","description":"Assessment assigned."},{"type":"assessments.assessment.declined","version":1,"aggregateType":"assessment","description":"Assessment declined."},{"type":"assessments.assessment.removed","version":1,"aggregateType":"assessment","description":"Assessment removed."},{"type":"assessments.assessment.reopened","version":1,"aggregateType":"assessment","description":"Assessment reopened."},{"type":"assessments.assessment.score_revised","version":1,"aggregateType":"assessment","description":"Assessment score revised."},{"type":"assessments.assessment.started","version":1,"aggregateType":"assessment","description":"Assessment started."},{"type":"assessments.assessment.submitted","version":1,"aggregateType":"assessment","description":"Assessment submitted."},{"type":"assessments.assessment_round.created","version":1,"aggregateType":"assessment_round","description":"Assessment round created."},{"type":"assessments.assessment_round.published","version":1,"aggregateType":"assessment_round","description":"Assessment round published."},{"type":"assessments.assessment_share.items_changed","version":1,"aggregateType":"assessment_share","description":"Assessment share items changed."},{"type":"assessments.assessment_share.published","version":1,"aggregateType":"assessment_share","description":"Assessment share published."},{"type":"assessments.capacity_assessment.reconciled","version":1,"aggregateType":"capacity_assessment","description":"Capacity assessment reconciled."},{"type":"assessments.capacity_assessment.started","version":1,"aggregateType":"capacity_assessment","description":"Capacity assessment started."},{"type":"assessments.capacity_assessment.submitted","version":1,"aggregateType":"capacity_assessment","description":"Capacity assessment submitted."},{"type":"assessments.conflict.confirmed","version":1,"aggregateType":"assessment","description":"Conflict confirmed."},{"type":"assessments.conflict.revoked","version":1,"aggregateType":"assessment","description":"Conflict revoked."},{"type":"assessments.decision.accepted","version":1,"aggregateType":"assessment_decision","description":"Decision accepted."},{"type":"assessments.score_recalculation_job.succeeded","version":1,"aggregateType":"score_recalculation_job","description":"Score recalculation job succeeded."},{"type":"contracts.contract.amount_changed","version":1,"aggregateType":"contract","description":"Contract amount changed."},{"type":"contracts.contract.completed","version":1,"aggregateType":"contract","description":"Contract completed."},{"type":"contracts.contract.created","version":1,"aggregateType":"contract","description":"Contract created."},{"type":"contracts.contract.dates_changed","version":1,"aggregateType":"contract","description":"Contract dates changed."},{"type":"contracts.contract.declined","version":1,"aggregateType":"contract","description":"Contract declined."},{"type":"contracts.contract.review_passed","version":1,"aggregateType":"contract","description":"Contract review passed."},{"type":"contracts.contract.review_requested","version":1,"aggregateType":"contract","description":"Contract review requested."},{"type":"contracts.contract.reviewer_changed","version":1,"aggregateType":"contract","description":"Contract reviewer changed."},{"type":"contracts.contract.sent","version":1,"aggregateType":"contract","description":"Contract sent."},{"type":"contracts.contract.signed_by_admin","version":1,"aggregateType":"contract","description":"Contract signed by admin."},{"type":"contracts.contract.signed_by_applicant_verifier","version":1,"aggregateType":"contract","description":"Contract signed by applicant verifier."},{"type":"contracts.contract.tags_changed","version":1,"aggregateType":"contract","description":"Contract tags changed."},{"type":"contracts.contract.terminated","version":1,"aggregateType":"contract","description":"Contract terminated."},{"type":"contracts.contract.termination_reverted","version":1,"aggregateType":"contract","description":"Contract termination reverted."},{"type":"contracts.contract.termination_started","version":1,"aggregateType":"contract","description":"Contract termination started."},{"type":"contracts.contract.variation_created","version":1,"aggregateType":"contract","description":"Contract variation created."},{"type":"contracts.contract.withdrawal_reverted","version":1,"aggregateType":"contract","description":"Contract withdrawal reverted."},{"type":"contracts.contract.withdrawal_started","version":1,"aggregateType":"contract","description":"Contract withdrawal started."},{"type":"contracts.contract.withdrawn","version":1,"aggregateType":"contract","description":"Contract withdrawn."},{"type":"contracts.contract_letter.created","version":1,"aggregateType":"contract_letter","description":"Contract letter created."},{"type":"contracts.contract_letter.reverted","version":1,"aggregateType":"contract_letter","description":"Contract letter reverted."},{"type":"contracts.contract_letter.review_requested","version":1,"aggregateType":"contract_letter","description":"Contract letter review requested."},{"type":"contracts.contract_letter.sent","version":1,"aggregateType":"contract_letter","description":"Contract letter sent."},{"type":"contracts.contract_obligation.met","version":1,"aggregateType":"contract_obligation","description":"Contract obligation met."},{"type":"contracts.contract_obligation.overdue","version":1,"aggregateType":"contract_obligation","description":"Contract obligation overdue."},{"type":"contracts.contract_obligation.waived","version":1,"aggregateType":"contract_obligation","description":"Contract obligation waived."},{"type":"contracts.contract_request.approved","version":1,"aggregateType":"contract_request","description":"Contract request approved."},{"type":"contracts.contract_request.contact_switched","version":1,"aggregateType":"contract_request","description":"Contract request contact switched."},{"type":"contracts.contract_request.declined","version":1,"aggregateType":"contract_request","description":"Contract request declined."},{"type":"contracts.contract_request.information_requested","version":1,"aggregateType":"contract_request","description":"Contract request information requested."},{"type":"contracts.contract_request.resubmitted","version":1,"aggregateType":"contract_request","description":"Contract request resubmitted."},{"type":"contracts.contract_request.submitted","version":1,"aggregateType":"contract_request","description":"Contract request submitted."},{"type":"contracts.contract_signatory.declined","version":1,"aggregateType":"contract_signatory","description":"Contract signatory declined."},{"type":"contracts.contract_signatory.offered","version":1,"aggregateType":"contract_signatory","description":"Contract signatory offered."},{"type":"contracts.contract_signatory.reset","version":1,"aggregateType":"contract_signatory","description":"Contract signatory reset."},{"type":"contracts.contract_signatory.signed","version":1,"aggregateType":"contract_signatory","description":"Contract signatory signed."},{"type":"decisions.appeal.assigned","version":1,"aggregateType":"appeal","description":"Appeal assigned."},{"type":"decisions.appeal.resolved","version":1,"aggregateType":"appeal","description":"Appeal resolved."},{"type":"decisions.appeal.submitted","version":1,"aggregateType":"appeal","description":"Appeal submitted."},{"type":"decisions.condition.approval_undone","version":1,"aggregateType":"condition","description":"Condition approval undone."},{"type":"decisions.condition.approved","version":1,"aggregateType":"condition","description":"Condition approved."},{"type":"decisions.condition.attached","version":1,"aggregateType":"condition","description":"Condition attached."},{"type":"decisions.condition.resubmission_requested","version":1,"aggregateType":"condition","description":"Condition resubmission requested."},{"type":"decisions.condition.submitted","version":1,"aggregateType":"condition","description":"Condition submitted."},{"type":"decisions.decision.created","version":1,"aggregateType":"decision","description":"Decision created."},{"type":"decisions.decision.review_forwarded","version":1,"aggregateType":"decision","description":"Decision review forwarded."},{"type":"decisions.decision.review_requested","version":1,"aggregateType":"decision","description":"Decision review requested."},{"type":"decisions.decision.reviewer_changed","version":1,"aggregateType":"decision","description":"Decision reviewer changed."},{"type":"decisions.decision.sent","version":1,"aggregateType":"decision","description":"Decision sent."},{"type":"decisions.decision_line.letter_failed","version":1,"aggregateType":"decision_line","description":"Decision line letter failed."},{"type":"decisions.decision_line.letter_issued","version":1,"aggregateType":"decision_line","description":"Decision line letter issued."},{"type":"decisions.decision_line.letter_resent","version":1,"aggregateType":"decision_line","description":"Decision line letter resent."},{"type":"decisions.decision_line.revoked","version":1,"aggregateType":"decision_line","description":"Decision line revoked."},{"type":"decisions.decision_line.sent","version":1,"aggregateType":"decision_line","description":"Decision line sent."},{"type":"decisions.grant_publication.due","version":1,"aggregateType":"grant_publication","description":"Grant publication due."},{"type":"decisions.grant_publication.excluded","version":1,"aggregateType":"grant_publication","description":"Grant publication excluded."},{"type":"decisions.grant_publication.exported","version":1,"aggregateType":"grant_publication","description":"Grant publication exported."},{"type":"decisions.offer.accepted","version":1,"aggregateType":"offer_response","description":"Offer accepted."},{"type":"decisions.offer.declined","version":1,"aggregateType":"offer_response","description":"Offer declined."},{"type":"decisions.offer.institution_accepted","version":1,"aggregateType":"offer_response","description":"Offer institution accepted."},{"type":"decisions.offer.institution_declined","version":1,"aggregateType":"offer_response","description":"Offer institution declined."},{"type":"funds.allocation.changed","version":1,"aggregateType":"funding_application","description":"Allocation changed."},{"type":"funds.attribution.changed","version":1,"aggregateType":"funding_application","description":"Attribution changed."},{"type":"funds.batch.generated","version":1,"aggregateType":"payment_batch","description":"Batch generated."},{"type":"funds.distribution_amount.changed","version":1,"aggregateType":"fund","description":"Distribution amount changed."},{"type":"funds.distribution_cycle.completed","version":1,"aggregateType":"fund_distribution_cycle","description":"Distribution cycle completed."},{"type":"funds.fund.created","version":1,"aggregateType":"fund","description":"Fund created."},{"type":"funds.fund.deleted","version":1,"aggregateType":"fund","description":"Fund deleted."},{"type":"funds.fund.donor_report_published","version":1,"aggregateType":"fund","description":"Fund donor report published."},{"type":"funds.fund.grant_recommendation_submitted","version":1,"aggregateType":"fund","description":"Fund grant recommendation submitted."},{"type":"funds.fund.updated","version":1,"aggregateType":"fund","description":"Fund updated."},{"type":"funds.fund_csv_import.apply_requested","version":1,"aggregateType":"fund_csv_import","description":"Fund csv import apply requested."},{"type":"funds.grant_recommendation.decided","version":1,"aggregateType":"grant_recommendation","description":"Grant recommendation decided."},{"type":"milestones.milestone.approval_undone","version":1,"aggregateType":"milestone","description":"Milestone approval undone."},{"type":"milestones.milestone.approved","version":1,"aggregateType":"milestone","description":"Milestone approved."},{"type":"milestones.milestone.contract_reordered","version":1,"aggregateType":"milestone","description":"Milestone contract reordered."},{"type":"milestones.milestone.created","version":1,"aggregateType":"milestone","description":"Milestone created."},{"type":"milestones.milestone.details_changed","version":1,"aggregateType":"milestone","description":"Milestone details changed."},{"type":"milestones.milestone.finance_approval_reverted","version":1,"aggregateType":"milestone","description":"Milestone finance approval reverted."},{"type":"milestones.milestone.finance_approved","version":1,"aggregateType":"milestone","description":"Milestone finance approved."},{"type":"milestones.milestone.forwarded_to_funder","version":1,"aggregateType":"milestone","description":"Milestone forwarded to funder."},{"type":"milestones.milestone.linked_to_contract","version":1,"aggregateType":"milestone","description":"Milestone linked to contract."},{"type":"milestones.milestone.payment_status_changed","version":1,"aggregateType":"milestone","description":"Milestone payment status changed."},{"type":"milestones.milestone.resubmission_requested","version":1,"aggregateType":"milestone","description":"Milestone resubmission requested."},{"type":"milestones.milestone.reviewer_assigned","version":1,"aggregateType":"milestone","description":"Milestone reviewer assigned."},{"type":"milestones.milestone.share_access_changed","version":1,"aggregateType":"milestone","description":"Milestone share access changed."},{"type":"milestones.milestone.submitted","version":1,"aggregateType":"milestone","description":"Milestone submitted."},{"type":"milestones.milestone.submitted_to_verifier","version":1,"aggregateType":"milestone","description":"Milestone submitted to verifier."},{"type":"milestones.milestone.tag_reselected","version":1,"aggregateType":"milestone","description":"Milestone tag reselected."},{"type":"milestones.milestone_batch.created","version":1,"aggregateType":"milestone_batch","description":"Milestone batch created."},{"type":"milestones.milestone_batch.deleted","version":1,"aggregateType":"milestone_batch","description":"Milestone batch deleted."},{"type":"milestones.milestone_batch.sent","version":1,"aggregateType":"milestone_batch","description":"Milestone batch sent."},{"type":"milestones.milestone_template.created","version":1,"aggregateType":"milestone_template","description":"Milestone template created."},{"type":"milestones.milestones.progressed","version":1,"aggregateType":"milestone","description":"Milestones progressed."},{"type":"milestones.milestones.published","version":1,"aggregateType":"milestone","description":"Milestones published."},{"type":"payments.finance_decision.recorded","version":1,"aggregateType":"payment_batch","description":"Finance decision recorded."},{"type":"payments.payment.deleted","version":1,"aggregateType":"payment","description":"Payment deleted."},{"type":"payments.payment.edited","version":1,"aggregateType":"payment","description":"Payment edited."},{"type":"payments.payment.marked_paid","version":1,"aggregateType":"payment","description":"Payment marked paid."},{"type":"payments.payment.refund_received","version":1,"aggregateType":"payment","description":"Payment refund received."},{"type":"payments.payment.voided","version":1,"aggregateType":"payment","description":"Payment voided."},{"type":"payments.payment_batch.approved","version":1,"aggregateType":"payment_batch","description":"Payment batch approved."},{"type":"payments.payment_batch.created","version":1,"aggregateType":"payment_batch","description":"Payment batch created."},{"type":"payments.payment_batch.deleted","version":1,"aggregateType":"payment_batch","description":"Payment batch deleted."},{"type":"payments.payment_batch.marked_paid","version":1,"aggregateType":"payment_batch","description":"Payment batch marked paid."},{"type":"payments.payment_batch.recipient_approved","version":1,"aggregateType":"payment_batch","description":"Payment batch recipient approved."},{"type":"payments.payment_batch.resubmitted","version":1,"aggregateType":"payment_batch","description":"Payment batch resubmitted."},{"type":"payments.payment_batch.returned_to_draft","version":1,"aggregateType":"payment_batch","description":"Payment batch returned to draft."},{"type":"payments.payment_batch.review_requested","version":1,"aggregateType":"payment_batch","description":"Payment batch review requested."},{"type":"payments.payment_batch.reviewer_reassigned","version":1,"aggregateType":"payment_batch","description":"Payment batch reviewer reassigned."},{"type":"payments.payment_letter.sent","version":1,"aggregateType":"payment_letter","description":"Payment letter sent."},{"type":"payments.repayment.requested","version":1,"aggregateType":"payment_repayment","description":"Repayment requested."},{"type":"registration.entity_domain.verified","version":1,"aggregateType":"registration_entity_domain","description":"Entity domain verified."},{"type":"registration.entity_duplicate.detected","version":1,"aggregateType":"entity_duplicate_pair","description":"Entity duplicate detected."},{"type":"registration.entity_join_request.created","version":1,"aggregateType":"entity_join_request","description":"Entity join request created."},{"type":"registration.entity_join_request.decided","version":1,"aggregateType":"entity_join_request","description":"Entity join request decided."},{"type":"registration.entity_member.invited","version":1,"aggregateType":"registration_entity","description":"Entity member invited."},{"type":"registration.registration.approved","version":1,"aggregateType":"registration","description":"Registration approved."},{"type":"registration.registration.details_changed","version":1,"aggregateType":"registration","description":"Registration details changed."},{"type":"registration.registration.resubmission_requested","version":1,"aggregateType":"registration","description":"Registration resubmission requested."},{"type":"registration.registration.submitted","version":1,"aggregateType":"registration","description":"Registration submitted."},{"type":"registration.registration_entity.bank_account_changed","version":1,"aggregateType":"registration_entity","description":"Registration entity bank account changed."},{"type":"registration.transfer.completed","version":1,"aggregateType":"registration_entity","description":"Transfer completed."},{"type":"rounds.funding_round.closed","version":1,"aggregateType":"funding_round","description":"Funding round closed."},{"type":"rounds.funding_round.listing_changed","version":1,"aggregateType":"funding_round","description":"Funding round listing changed."},{"type":"rounds.funding_round.made_live","version":1,"aggregateType":"funding_round","description":"Funding round made live."},{"type":"rounds.funding_round.published","version":1,"aggregateType":"funding_round","description":"Funding round published."},{"type":"rounds.funding_round.unpublished","version":1,"aggregateType":"funding_round","description":"Funding round unpublished."},{"type":"rounds.private_grant_invitee.invited","version":1,"aggregateType":"private_grant_invitee","description":"Private grant invitee invited."},{"type":"webhook.test","version":1,"aggregateType":"webhook_endpoint","description":"A test event sent by Send test event; never sent otherwise."}],"x-odata-feed":{"root":"/odata/v4","entitySets":["Applications","Applicants","RegistrationEntities","FundingRounds","Assessments","Decisions","Contracts","Milestones","Payments","Funds"],"scope":"read:reporting_feed","auth":["bearer","basic"]}}