Skip to content

GrantLink Public API

A stable, resource-oriented JSON API for read-only GrantLink integrations. Operations, parameters, responses, examples, and schemas below are rendered from the checked-in OpenAPI 3.1 description.

Version
1.0.0
Operations
12
Schemas
39

Base URL

https://api.grantlink.app
Open raw description

Contract published; access controlled

REST API v1 is deployed but globally default-off. Organization policy and data-readiness gates still apply when the service is enabled. Contact GrantLink before depending on production access.

On this page

Authentication

Clerk delegated OAuth authorization code flow with PKCE. Both scopes are required, and tenant context comes only from the verified org_id claim.

Authorization URL
https://clerk.grantlink.app/oauth/authorize
Token URL
https://clerk.grantlink.app/oauth/token
Required scopes
user:org:read
Read the organization selected during delegated OAuth consent.
grantlink:read
Read GrantLink public API v1 resources.

Contract conventions

Stable, read-only integration API for GrantLink grants, funders, initiatives, reporting cycles, accounting availability, canonical financial positions, and effective grant transactions. Responses use fixed JSON schemas, opaque cursor pagination, exact decimal-string money, RFC 3339 UTC instants, full-date business dates, and RFC 9457 problems.

Read-only by design

The v1 operation catalog contains GET resources. It is not the transport for MCP tools or future write contracts.

Exact financial values

Money is represented as an exact decimal string plus an ISO 4217 currency code, never a JSON floating-point number.

Opaque pagination

Collection cursors are opaque. Follow links.next when present rather than constructing or interpreting cursor values.

Correlated problems

Errors use RFC 9457 Problem Details with stable GrantLink codes and a request ID for support and telemetry correlation.

Organization

Safe organization settings selected by delegated OAuth context.

GET/v1/organization

Get the selected organization

Returns safe settings for the organization selected only by the verified bearer token. This is a safe, read-only operation with no side effects.

Example request

curl --request GET \
+  --url 'https://api.grantlink.app/v1/organization' \
+  --header 'Accept: application/json' \
+  --header 'Authorization: Bearer <oauth-access-token>'

This operation has no parameters.

Success response

200Organization

Safe settings for the organization selected only by the verified bearer token.

{
  "id": "org_A4n8wQ2mL6pR",
  "name": "Example Youth Services",
  "slug": "example-youth-services",
  "fiscalYearStartMonth": 7,
  "timezone": "America/New_York",
  "accountingCurrency": "USD",
  "createdAt": "2025-11-02T14:20:00Z"
}
All declared responses14 statuses
StatusBodyDescription
200Organizationapplication/jsonSafe settings for the organization selected only by the verified bearer token.
304No bodyThe current representation matches If-None-Match. The response has no body.
400BadRequestProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
401UnauthorizedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
403ForbiddenProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
404NotFoundProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
405MethodNotAllowedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
406NotAcceptableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
409ConflictProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
410GoneProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
414UriTooLongProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
429TooManyRequestsProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
500InternalServerErrorProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
503ServiceUnavailableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.

Accounting

Coarse accounting-source availability and canonical financial reads.

GET/v1/accounting-status

Get accounting availability

Returns coarse QuickBooks Online availability and freshness without provider IDs, connection objects, jobs, or credentials. This is a safe, read-only operation with no side effects.

Example request

curl --request GET \
+  --url 'https://api.grantlink.app/v1/accounting-status' \
+  --header 'Accept: application/json' \
+  --header 'Authorization: Bearer <oauth-access-token>'

This operation has no parameters.

Success response

200AccountingStatus

Coarse QuickBooks Online availability and freshness with no realm, token, job, connection, or provider IDs.

{
  "provider": "quickbooks_online",
  "status": "connected",
  "sourceDataAsOf": "2026-09-01T13:45:22Z",
  "lastSuccessfulSyncAt": "2026-09-01T13:45:30Z",
  "warnings": []
}
All declared responses14 statuses
StatusBodyDescription
200AccountingStatusapplication/jsonCoarse QuickBooks Online availability and freshness with no realm, token, job, connection, or provider IDs.
304No bodyThe current representation matches If-None-Match. The response has no body.
400BadRequestProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
401UnauthorizedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
403ForbiddenProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
404NotFoundProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
405MethodNotAllowedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
406NotAcceptableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
409ConflictProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
410GoneProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
414UriTooLongProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
429TooManyRequestsProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
500InternalServerErrorProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
503ServiceUnavailableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.

Grants

Grant portfolio, canonical financial position, and effective transaction reads.

GET/v1/grants

List grants

Returns a bounded grant portfolio with finite exact filters or index-backed name search. Pagination is live rather than snapshot-isolated. This is a safe, read-only operation with no side effects.

Example request

curl --request GET \
+  --url 'https://api.grantlink.app/v1/grants?limit=25&archiveState=active&sort=-createdAt' \
+  --header 'Accept: application/json' \
+  --header 'Authorization: Bearer <oauth-access-token>'

Parameters

NameInTypeConstraints
limitoptionalqueryintegerdefault: 25 · minimum: 1 · maximum: 100
cursoroptionalquerystringminLength: 1 · maxLength: 8192
statusoptionalquerystring[]maxItems: 10 · uniqueItems: truestyle: form · explode: false
typeoptionalquerystring[]maxItems: 10 · uniqueItems: truestyle: form · explode: false
funderIdoptionalquerystringpattern: ^fnd_[A-Za-z0-9_-]{8,100}$ · maxLength: 128
initiativeIdoptionalquerystringpattern: ^ini_[A-Za-z0-9_-]{8,100}$ · maxLength: 128
grantNumberoptionalquerystringminLength: 1 · maxLength: 200
internalCodeoptionalquerystringminLength: 1 · maxLength: 200
archiveStateoptionalquerystringenum: active | archived | all · default: active
periodEndFromoptionalquerystringformat: date · pattern: ^\d{4}-\d{2}-\d{2}$
periodEndTooptionalquerystringformat: date · pattern: ^\d{4}-\d{2}-\d{2}$
searchoptionalquerystringminLength: 2 · maxLength: 100
sortoptionalquerystringenum: createdAt | -createdAt | name | -name | periodEnd | -periodEnd | awardAmount | -awardAmount · default: -createdAt

Success response

200GrantSummaryCollection

Bounded collection document. A page may end before its item limit when the response byte/read budget is reached.

{
  "items": [
    {
      "id": "grt_q7Y2nD8kL5mP",
      "name": "2026 Youth Education Award",
      "grantNumber": "EDU-2026-17",
      "internalCode": "YEA-26",
      "type": "with_donor_restrictions_time_purpose",
      "status": "active",
      "awardAmount": {
        "amount": "125000.00",
        "currency": "USD"
      },
      "period": {
        "startDate": "2026-07-01",
        "endDate": "2027-06-30"
      },
      "funder": {
        "id": "fnd_M3p8vR2xQ9cN",
        "name": "Example Community Foundation"
      },
      "createdAt": "2026-05-14T17:32:08Z",
      "updatedAt": "2026-08-29T20:14:11Z",
      "archivedAt": null
    }
  ],
  "page": {
    "limit": 25,
    "hasMore": false,
    "nextCursor": null
  },
  "links": {
    "self": "https://api.grantlink.app/v1/grants?status=active&limit=25",
    "next": null
  }
}
All declared responses13 statuses
StatusBodyDescription
200GrantSummaryCollectionapplication/jsonBounded collection document. A page may end before its item limit when the response byte/read budget is reached.
400BadRequestProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
401UnauthorizedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
403ForbiddenProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
404NotFoundProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
405MethodNotAllowedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
406NotAcceptableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
409ConflictProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
410GoneProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
414UriTooLongProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
429TooManyRequestsProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
500InternalServerErrorProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
503ServiceUnavailableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
GET/v1/grants/{grantId}

Get a grant

Returns one complete safe grant representation with compact funder and initiative relationships. This is a safe, read-only operation with no side effects.

Example request

curl --request GET \
+  --url 'https://api.grantlink.app/v1/grants/{grantId}' \
+  --header 'Accept: application/json' \
+  --header 'Authorization: Bearer <oauth-access-token>'

Parameters

NameInTypeConstraints
grantIdrequiredpathstringpattern: ^grt_[A-Za-z0-9_-]{8,100}$ · maxLength: 128

Success response

200Grant

Complete safe grant settings with compact relationships and no provider, actor, password, or import fields.

{
  "id": "grt_q7Y2nD8kL5mP",
  "name": "2026 Youth Education Award",
  "grantNumber": "EDU-2026-17",
  "internalCode": "YEA-26",
  "type": "with_donor_restrictions_time_purpose",
  "status": "active",
  "awardAmount": {
    "amount": "125000.00",
    "currency": "USD"
  },
  "period": {
    "startDate": "2026-07-01",
    "endDate": "2027-06-30"
  },
  "funder": {
    "id": "fnd_M3p8vR2xQ9cN",
    "name": "Example Community Foundation"
  },
  "createdAt": "2026-05-14T17:32:08Z",
  "updatedAt": "2026-08-29T20:14:11Z",
  "archivedAt": null,
  "description": "Supports after-school learning and family engagement.",
  "match": {
    "requiredAmount": null,
    "ratio": null
  },
  "expenseEligibility": {
    "notBefore": "2026-07-01",
    "notAfter": "2027-06-30"
  },
  "indirectCost": {
    "ratePercent": 10,
    "base": "mtdc",
    "capAmount": null
  },
  "reporting": {
    "cadence": "quarterly",
    "quarterScheme": "grant",
    "dayOffset": 30,
    "finalReportDueDate": "2027-07-30"
  },
  "federalAward": {
    "assistanceListingNumber": null,
    "federalAwardId": null,
    "fundingSource": "private",
    "passThroughEntityName": null,
    "passThroughEntityId": null
  },
  "fundReceiptStatus": "partial",
  "awardedAt": "2026-05-14T17:32:08Z",
  "awardNotificationDate": "2026-05-14",
  "activatedAt": "2026-07-01T00:00:00Z",
  "closeoutStartedAt": null,
  "closeoutDeadline": null,
  "closedAt": null,
  "declinedAt": null,
  "withdrawnAt": null,
  "initiatives": [
    {
      "id": "ini_T4w9bK6sH2jF",
      "name": "Youth Education",
      "code": "YOUTH-ED",
      "designatedAmount": {
        "amount": "100000.00",
        "currency": "USD"
      },
      "designatedPercentage": 80,
      "primary": true,
      "status": "active"
    }
  ]
}
All declared responses14 statuses
StatusBodyDescription
200Grantapplication/jsonComplete safe grant settings with compact relationships and no provider, actor, password, or import fields.
304No bodyThe current representation matches If-None-Match. The response has no body.
400BadRequestProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
401UnauthorizedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
403ForbiddenProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
404NotFoundProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
405MethodNotAllowedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
406NotAcceptableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
409ConflictProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
410GoneProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
414UriTooLongProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
429TooManyRequestsProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
500InternalServerErrorProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
503ServiceUnavailableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
GET/v1/grants/{grantId}/financial-position

Get a grant financial position

Returns canonical award, receipts, recorded spend, funding coverage, and restriction position. receivedCashLessRecordedSpendAmount is funding coverage, not a bank balance, because recorded spend can include unpaid bills and journal entries. This is a safe, read-only operation with no side effects.

Example request

curl --request GET \
+  --url 'https://api.grantlink.app/v1/grants/{grantId}/financial-position' \
+  --header 'Accept: application/json' \
+  --header 'Authorization: Bearer <oauth-access-token>'

Parameters

NameInTypeConstraints
grantIdrequiredpathstringpattern: ^grt_[A-Za-z0-9_-]{8,100}$ · maxLength: 128

Success response

200GrantFinancialPosition

Canonical award, receipt, recorded-spend, coverage, and restriction position. receivedCashLessRecordedSpendAmount is funding coverage, not a bank balance; recorded spend can include unpaid bills and journal entries.

{
  "grant": {
    "id": "grt_q7Y2nD8kL5mP",
    "name": "2026 Youth Education Award"
  },
  "currency": "USD",
  "sourceDataAsOf": "2026-09-01T13:45:22Z",
  "warnings": [],
  "awardedAmount": {
    "amount": "125000.00",
    "currency": "USD"
  },
  "receivedCashAmount": {
    "amount": "75000.00",
    "currency": "USD"
  },
  "recordedSpend": {
    "totalAmount": {
      "amount": "62150.43",
      "currency": "USD"
    },
    "directAmount": {
      "amount": "57300.43",
      "currency": "USD"
    },
    "indirectAmount": {
      "amount": "4850.00",
      "currency": "USD"
    }
  },
  "remainingAwardAmount": {
    "amount": "62849.57",
    "currency": "USD"
  },
  "receivedCashLessRecordedSpendAmount": {
    "amount": "12849.57",
    "currency": "USD"
  },
  "restriction": {
    "kind": "time_or_purpose",
    "restrictedAwardRemainingAmount": {
      "amount": "62849.57",
      "currency": "USD"
    },
    "restrictedReceivedLessSpendAmount": {
      "amount": "12849.57",
      "currency": "USD"
    }
  }
}
All declared responses14 statuses
StatusBodyDescription
200GrantFinancialPositionapplication/jsonCanonical award, receipt, recorded-spend, coverage, and restriction position. receivedCashLessRecordedSpendAmount is funding coverage, not a bank balance; recorded spend can include unpaid bills and journal entries.
304No bodyThe current representation matches If-None-Match. The response has no body.
400BadRequestProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
401UnauthorizedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
403ForbiddenProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
404NotFoundProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
405MethodNotAllowedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
406NotAcceptableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
409ConflictProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
410GoneProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
414UriTooLongProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
429TooManyRequestsProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
500InternalServerErrorProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
503ServiceUnavailableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
GET/v1/grants/{grantId}/transactions

List effective grant transactions

Returns bounded effective operating-expense assignments rather than raw QuickBooks rows. Reclassification or splitting can retire one assignment ID and create new IDs; restriction-release activity is excluded. This is a safe, read-only operation with no side effects.

Example request

curl --request GET \
+  --url 'https://api.grantlink.app/v1/grants/{grantId}/transactions?limit=50&sort=-accountingDate' \
+  --header 'Accept: application/json' \
+  --header 'Authorization: Bearer <oauth-access-token>'

Parameters

NameInTypeConstraints
grantIdrequiredpathstringpattern: ^grt_[A-Za-z0-9_-]{8,100}$ · maxLength: 128
limitoptionalqueryintegerdefault: 50 · minimum: 1 · maximum: 100
cursoroptionalquerystringminLength: 1 · maxLength: 8192
initiativeIdoptionalquerystringpattern: ^ini_[A-Za-z0-9_-]{8,100}$ · maxLength: 128
budgetCategoryIdoptionalquerystringpattern: ^bct_[A-Za-z0-9_-]{8,100}$ · maxLength: 128
budgetLineIdoptionalquerystringpattern: ^bln_[A-Za-z0-9_-]{8,100}$ · maxLength: 128
costTypeoptionalquerystring[]maxItems: 10 · uniqueItems: truestyle: form · explode: false
sourceTypeoptionalquerystring[]maxItems: 10 · uniqueItems: truestyle: form · explode: false
accountingDateFromoptionalquerystringformat: date · pattern: ^\d{4}-\d{2}-\d{2}$
accountingDateTooptionalquerystringformat: date · pattern: ^\d{4}-\d{2}-\d{2}$
sortoptionalquerystringenum: accountingDate | -accountingDate · default: -accountingDate

Success response

200GrantTransactionCollection

Bounded effective assignments with accounting-source freshness and safe warnings.

{
  "grant": {
    "id": "grt_q7Y2nD8kL5mP",
    "name": "2026 Youth Education Award"
  },
  "sourceDataAsOf": "2026-09-01T13:45:22Z",
  "warnings": [],
  "items": [
    {
      "id": "txn_P9r2mX7cV4kL",
      "grant": {
        "id": "grt_q7Y2nD8kL5mP",
        "name": "2026 Youth Education Award"
      },
      "accountingDate": "2026-08-28",
      "sourceType": "bill",
      "reference": "BILL-1048",
      "counterparty": "Example Learning Supplies",
      "memo": "Fall program materials",
      "amount": {
        "amount": "1840.25",
        "currency": "USD"
      },
      "costType": "direct",
      "initiative": {
        "id": "ini_T4w9bK6sH2jF",
        "name": "Youth Education"
      },
      "budgetCategory": {
        "id": "bct_C5n8sQ3aD7eR",
        "name": "Program Supplies",
        "code": "SUP"
      },
      "budgetLine": {
        "id": "bln_A6f1uJ8zN3hW",
        "name": "Learning Materials"
      }
    }
  ],
  "page": {
    "limit": 50,
    "hasMore": false,
    "nextCursor": null
  },
  "links": {
    "self": "https://api.grantlink.app/v1/grants/grt_q7Y2nD8kL5mP/transactions?limit=50",
    "next": null
  }
}
All declared responses13 statuses
StatusBodyDescription
200GrantTransactionCollectionapplication/jsonBounded effective assignments with accounting-source freshness and safe warnings.
400BadRequestProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
401UnauthorizedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
403ForbiddenProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
404NotFoundProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
405MethodNotAllowedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
406NotAcceptableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
409ConflictProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
410GoneProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
414UriTooLongProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
429TooManyRequestsProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
500InternalServerErrorProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
503ServiceUnavailableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.

Funders

Safe funder directory reads with contact data excluded.

GET/v1/funders

List funders

Returns a bounded funder directory with finite exact filters or index-backed name search. Contact data is excluded in v1.0. This is a safe, read-only operation with no side effects.

Example request

curl --request GET \
+  --url 'https://api.grantlink.app/v1/funders?limit=25&archiveState=active&sort=-createdAt' \
+  --header 'Accept: application/json' \
+  --header 'Authorization: Bearer <oauth-access-token>'

Parameters

NameInTypeConstraints
limitoptionalqueryintegerdefault: 25 · minimum: 1 · maximum: 100
cursoroptionalquerystringminLength: 1 · maxLength: 8192
typeoptionalquerystring[]maxItems: 10 · uniqueItems: truestyle: form · explode: false
archiveStateoptionalquerystringenum: active | archived | all · default: active
searchoptionalquerystringminLength: 2 · maxLength: 100
sortoptionalquerystringenum: createdAt | -createdAt | name | -name · default: -createdAt

Success response

200FunderSummaryCollection

Bounded collection document. A page may end before its item limit when the response byte/read budget is reached.

{
  "items": [
    {
      "id": "fnd_M3p8vR2xQ9cN",
      "name": "Example Community Foundation",
      "shortName": "ECF",
      "type": "foundation",
      "createdAt": "2026-01-05T12:00:00Z",
      "updatedAt": "2026-08-20T15:10:00Z",
      "archivedAt": null
    }
  ],
  "page": {
    "limit": 25,
    "hasMore": false,
    "nextCursor": null
  },
  "links": {
    "self": "https://api.grantlink.app/v1/funders?limit=25",
    "next": null
  }
}
All declared responses13 statuses
StatusBodyDescription
200FunderSummaryCollectionapplication/jsonBounded collection document. A page may end before its item limit when the response byte/read budget is reached.
400BadRequestProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
401UnauthorizedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
403ForbiddenProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
404NotFoundProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
405MethodNotAllowedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
406NotAcceptableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
409ConflictProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
410GoneProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
414UriTooLongProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
429TooManyRequestsProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
500InternalServerErrorProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
503ServiceUnavailableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
GET/v1/funders/{funderId}

Get a funder

Returns one funder without contact, provider, or actor data. This is a safe, read-only operation with no side effects.

Example request

curl --request GET \
+  --url 'https://api.grantlink.app/v1/funders/{funderId}' \
+  --header 'Accept: application/json' \
+  --header 'Authorization: Bearer <oauth-access-token>'

Parameters

NameInTypeConstraints
funderIdrequiredpathstringpattern: ^fnd_[A-Za-z0-9_-]{8,100}$ · maxLength: 128

Success response

200Funder

Complete public funder details. Contact name, email, and phone are intentionally excluded in v1.0.

{
  "id": "fnd_M3p8vR2xQ9cN",
  "name": "Example Community Foundation",
  "shortName": "ECF",
  "type": "foundation",
  "description": "A regional community foundation.",
  "website": "https://example.org",
  "createdAt": "2026-01-05T12:00:00Z",
  "updatedAt": "2026-08-20T15:10:00Z",
  "archivedAt": null
}
All declared responses14 statuses
StatusBodyDescription
200Funderapplication/jsonComplete public funder details. Contact name, email, and phone are intentionally excluded in v1.0.
304No bodyThe current representation matches If-None-Match. The response has no body.
400BadRequestProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
401UnauthorizedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
403ForbiddenProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
404NotFoundProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
405MethodNotAllowedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
406NotAcceptableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
409ConflictProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
410GoneProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
414UriTooLongProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
429TooManyRequestsProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
500InternalServerErrorProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
503ServiceUnavailableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.

Initiatives

Public initiative directory reads; internal program terminology is not exposed.

GET/v1/initiatives

List initiatives

Returns a bounded initiative directory with finite exact filters or index-backed name search. The public resource is always called an initiative. This is a safe, read-only operation with no side effects.

Example request

curl --request GET \
+  --url 'https://api.grantlink.app/v1/initiatives?limit=25&archiveState=active&sort=-createdAt' \
+  --header 'Accept: application/json' \
+  --header 'Authorization: Bearer <oauth-access-token>'

Parameters

NameInTypeConstraints
limitoptionalqueryintegerdefault: 25 · minimum: 1 · maximum: 100
cursoroptionalquerystringminLength: 1 · maxLength: 8192
statusoptionalquerystring[]maxItems: 10 · uniqueItems: truestyle: form · explode: false
functionalCategoryoptionalquerystring[]maxItems: 10 · uniqueItems: truestyle: form · explode: false
parentIdoptionalquerystringpattern: ^ini_[A-Za-z0-9_-]{8,100}$ · maxLength: 128
codeoptionalquerystringminLength: 1 · maxLength: 200
archiveStateoptionalquerystringenum: active | archived | all · default: active
periodEndFromoptionalquerystringformat: date · pattern: ^\d{4}-\d{2}-\d{2}$
periodEndTooptionalquerystringformat: date · pattern: ^\d{4}-\d{2}-\d{2}$
searchoptionalquerystringminLength: 2 · maxLength: 100
sortoptionalquerystringenum: createdAt | -createdAt | name | -name | periodEnd | -periodEnd · default: -createdAt

Success response

200InitiativeSummaryCollection

Bounded collection document. A page may end before its item limit when the response byte/read budget is reached.

{
  "items": [
    {
      "id": "ini_T4w9bK6sH2jF",
      "name": "Youth Education",
      "code": "YOUTH-ED",
      "functionalCategory": "program_services",
      "status": "active",
      "period": {
        "startDate": null,
        "endDate": null
      },
      "targetAmount": {
        "amount": "200000.00",
        "currency": "USD"
      },
      "restrictionType": "purpose",
      "parent": null,
      "createdAt": "2026-01-10T09:00:00Z",
      "updatedAt": "2026-08-18T11:30:00Z",
      "archivedAt": null
    }
  ],
  "page": {
    "limit": 25,
    "hasMore": false,
    "nextCursor": null
  },
  "links": {
    "self": "https://api.grantlink.app/v1/initiatives?limit=25",
    "next": null
  }
}
All declared responses13 statuses
StatusBodyDescription
200InitiativeSummaryCollectionapplication/jsonBounded collection document. A page may end before its item limit when the response byte/read budget is reached.
400BadRequestProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
401UnauthorizedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
403ForbiddenProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
404NotFoundProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
405MethodNotAllowedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
406NotAcceptableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
409ConflictProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
410GoneProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
414UriTooLongProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
429TooManyRequestsProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
500InternalServerErrorProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
503ServiceUnavailableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
GET/v1/initiatives/{initiativeId}

Get an initiative

Returns one initiative with a fixed schema and no obsolete kind, display, provider-link, actor, or idempotency fields. This is a safe, read-only operation with no side effects.

Example request

curl --request GET \
+  --url 'https://api.grantlink.app/v1/initiatives/{initiativeId}' \
+  --header 'Accept: application/json' \
+  --header 'Authorization: Bearer <oauth-access-token>'

Parameters

NameInTypeConstraints
initiativeIdrequiredpathstringpattern: ^ini_[A-Za-z0-9_-]{8,100}$ · maxLength: 128

Success response

200Initiative

Complete initiative details with internal display and provider-link fields excluded.

{
  "id": "ini_T4w9bK6sH2jF",
  "name": "Youth Education",
  "code": "YOUTH-ED",
  "functionalCategory": "program_services",
  "status": "active",
  "period": {
    "startDate": null,
    "endDate": null
  },
  "targetAmount": {
    "amount": "200000.00",
    "currency": "USD"
  },
  "restrictionType": "purpose",
  "parent": null,
  "description": "Education services for local youth.",
  "createdAt": "2026-01-10T09:00:00Z",
  "updatedAt": "2026-08-18T11:30:00Z",
  "archivedAt": null
}
All declared responses14 statuses
StatusBodyDescription
200Initiativeapplication/jsonComplete initiative details with internal display and provider-link fields excluded.
304No bodyThe current representation matches If-None-Match. The response has no body.
400BadRequestProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
401UnauthorizedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
403ForbiddenProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
404NotFoundProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
405MethodNotAllowedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
406NotAcceptableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
409ConflictProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
410GoneProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
414UriTooLongProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
429TooManyRequestsProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
500InternalServerErrorProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
503ServiceUnavailableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.

Reporting cycles

Reporting deadlines and safe public workflow state.

GET/v1/reporting-cycles

List reporting cycles

Returns bounded reporting deadlines and workflow status with internal notes, feedback, reminder history, confirmation numbers, and actor data excluded. This is a safe, read-only operation with no side effects.

Example request

curl --request GET \
+  --url 'https://api.grantlink.app/v1/reporting-cycles?limit=25&sort=dueDate' \
+  --header 'Accept: application/json' \
+  --header 'Authorization: Bearer <oauth-access-token>'

Parameters

NameInTypeConstraints
limitoptionalqueryintegerdefault: 25 · minimum: 1 · maximum: 100
cursoroptionalquerystringminLength: 1 · maxLength: 8192
grantIdoptionalquerystringpattern: ^grt_[A-Za-z0-9_-]{8,100}$ · maxLength: 128
statusoptionalquerystring[]maxItems: 10 · uniqueItems: truestyle: form · explode: false
typeoptionalquerystring[]maxItems: 10 · uniqueItems: truestyle: form · explode: false
dueFromoptionalquerystringformat: date · pattern: ^\d{4}-\d{2}-\d{2}$
dueTooptionalquerystringformat: date · pattern: ^\d{4}-\d{2}-\d{2}$
sortoptionalquerystringenum: dueDate | -dueDate · default: dueDate

Success response

200ReportingCycleCollection

Bounded collection document. A page may end before its item limit when the response byte/read budget is reached.

{
  "items": [
    {
      "id": "rcy_R8k2vN5mQ7xC",
      "grant": {
        "id": "grt_q7Y2nD8kL5mP",
        "name": "2026 Youth Education Award"
      },
      "period": {
        "startDate": "2026-07-01",
        "endDate": "2026-09-30"
      },
      "dueDate": "2026-10-30",
      "type": "interim",
      "customLabel": null,
      "status": "upcoming",
      "submittedAt": null
    }
  ],
  "page": {
    "limit": 25,
    "hasMore": false,
    "nextCursor": null
  },
  "links": {
    "self": "https://api.grantlink.app/v1/reporting-cycles?limit=25",
    "next": null
  }
}
All declared responses13 statuses
StatusBodyDescription
200ReportingCycleCollectionapplication/jsonBounded collection document. A page may end before its item limit when the response byte/read budget is reached.
400BadRequestProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
401UnauthorizedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
403ForbiddenProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
404NotFoundProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
405MethodNotAllowedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
406NotAcceptableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
409ConflictProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
410GoneProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
414UriTooLongProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
429TooManyRequestsProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
500InternalServerErrorProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
503ServiceUnavailableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
GET/v1/reporting-cycles/{reportingCycleId}

Get a reporting cycle

Returns one reporting deadline and public workflow status. This is a safe, read-only operation with no side effects.

Example request

curl --request GET \
+  --url 'https://api.grantlink.app/v1/reporting-cycles/{reportingCycleId}' \
+  --header 'Accept: application/json' \
+  --header 'Authorization: Bearer <oauth-access-token>'

Parameters

NameInTypeConstraints
reportingCycleIdrequiredpathstringpattern: ^rcy_[A-Za-z0-9_-]{8,100}$ · maxLength: 128

Success response

200ReportingCycle

A reporting deadline and workflow state without internal notes, reminders, feedback, or actor data.

{
  "id": "rcy_R8k2vN5mQ7xC",
  "grant": {
    "id": "grt_q7Y2nD8kL5mP",
    "name": "2026 Youth Education Award"
  },
  "period": {
    "startDate": "2026-07-01",
    "endDate": "2026-09-30"
  },
  "dueDate": "2026-10-30",
  "type": "interim",
  "customLabel": null,
  "status": "upcoming",
  "submittedAt": null
}
All declared responses14 statuses
StatusBodyDescription
200ReportingCycleapplication/jsonA reporting deadline and workflow state without internal notes, reminders, feedback, or actor data.
304No bodyThe current representation matches If-None-Match. The response has no body.
400BadRequestProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
401UnauthorizedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
403ForbiddenProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
404NotFoundProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
405MethodNotAllowedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
406NotAcceptableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
409ConflictProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
410GoneProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
414UriTooLongProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
429TooManyRequestsProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
500InternalServerErrorProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
503ServiceUnavailableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.

Errors

Every operation declares its failure statuses in OpenAPI. Problem responses use application/problem+json and include a stable code plus X-Request-Id correlation.

StatusBodyDescription
400BadRequestProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
401UnauthorizedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
403ForbiddenProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
404NotFoundProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
405MethodNotAllowedProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
406NotAcceptableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
409ConflictProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
410GoneProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
414UriTooLongProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
429TooManyRequestsProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
500InternalServerErrorProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.
503ServiceUnavailableProblemapplication/problem+jsonRFC 9457 Problem Details with stable GrantLink code and request correlation ID.

Schemas

39 component schemas define the public response and problem shapes. Expand a schema to inspect its fields and constraints.

Organizationobject

Safe settings for the organization selected only by the verified bearer token.

FieldTypeDescription and constraints
idrequiredstringPersisted opaque public identifier. Compare it as an exact case-sensitive string.pattern: ^(?:org_|grt_|fnd_|ini_|rcy_|txn_|bct_|bln_)[A-Za-z0-9_-]{8,100}$ · maxLength: 128
namerequiredstring
slugrequiredstring | null
fiscalYearStartMonthrequiredinteger | null
timezonerequiredstring | null
accountingCurrencyrequiredstringUppercase ISO 4217 currency code. GrantLink v1 launches with USD and CAD.pattern: ^[A-Z]{3}$
createdAtrequiredstringRFC 3339 UTC instant with second precision.pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$
ProblemErrorobject

One field-specific problem. Query/header errors use parameter; future JSON body errors use an RFC 6901 pointer.

FieldTypeDescription and constraints
coderequiredstring
detailrequiredstring
parameteroptionalstring
pointeroptionalstring
BadRequestProblemobject

RFC 9457 Problem Details with stable GrantLink code and request correlation ID.

FieldTypeDescription and constraints
typerequiredstringStable HTTPS documentation URI for this problem type.
titlerequiredstring
statusrequirednumberenum: 400
detailrequiredstring
instancerequiredstring
coderequiredstringenum: invalid_path | invalid_query | invalid_header | invalid_cursor | invalid_token | insufficient_scope | organization_context_required | organization_not_found | api_access_denied | financial_api_access_denied | resource_not_found | method_not_allowed | not_acceptable | accounting_source_unavailable | currency_aggregation_unavailable | representation_too_large | cursor_expired | uri_too_long | rate_limit_exceeded | internal_error | dependency_unavailable
requestIdrequiredstring
errorsoptionalProblemError[]maxItems: 100
UnauthorizedProblemobject

RFC 9457 Problem Details with stable GrantLink code and request correlation ID.

FieldTypeDescription and constraints
typerequiredstringStable HTTPS documentation URI for this problem type.
titlerequiredstring
statusrequirednumberenum: 401
detailrequiredstring
instancerequiredstring
coderequiredstringenum: invalid_path | invalid_query | invalid_header | invalid_cursor | invalid_token | insufficient_scope | organization_context_required | organization_not_found | api_access_denied | financial_api_access_denied | resource_not_found | method_not_allowed | not_acceptable | accounting_source_unavailable | currency_aggregation_unavailable | representation_too_large | cursor_expired | uri_too_long | rate_limit_exceeded | internal_error | dependency_unavailable
requestIdrequiredstring
errorsoptionalProblemError[]maxItems: 100
ForbiddenProblemobject

RFC 9457 Problem Details with stable GrantLink code and request correlation ID.

FieldTypeDescription and constraints
typerequiredstringStable HTTPS documentation URI for this problem type.
titlerequiredstring
statusrequirednumberenum: 403
detailrequiredstring
instancerequiredstring
coderequiredstringenum: invalid_path | invalid_query | invalid_header | invalid_cursor | invalid_token | insufficient_scope | organization_context_required | organization_not_found | api_access_denied | financial_api_access_denied | resource_not_found | method_not_allowed | not_acceptable | accounting_source_unavailable | currency_aggregation_unavailable | representation_too_large | cursor_expired | uri_too_long | rate_limit_exceeded | internal_error | dependency_unavailable
requestIdrequiredstring
errorsoptionalProblemError[]maxItems: 100
NotFoundProblemobject

RFC 9457 Problem Details with stable GrantLink code and request correlation ID.

FieldTypeDescription and constraints
typerequiredstringStable HTTPS documentation URI for this problem type.
titlerequiredstring
statusrequirednumberenum: 404
detailrequiredstring
instancerequiredstring
coderequiredstringenum: invalid_path | invalid_query | invalid_header | invalid_cursor | invalid_token | insufficient_scope | organization_context_required | organization_not_found | api_access_denied | financial_api_access_denied | resource_not_found | method_not_allowed | not_acceptable | accounting_source_unavailable | currency_aggregation_unavailable | representation_too_large | cursor_expired | uri_too_long | rate_limit_exceeded | internal_error | dependency_unavailable
requestIdrequiredstring
errorsoptionalProblemError[]maxItems: 100
MethodNotAllowedProblemobject

RFC 9457 Problem Details with stable GrantLink code and request correlation ID.

FieldTypeDescription and constraints
typerequiredstringStable HTTPS documentation URI for this problem type.
titlerequiredstring
statusrequirednumberenum: 405
detailrequiredstring
instancerequiredstring
coderequiredstringenum: invalid_path | invalid_query | invalid_header | invalid_cursor | invalid_token | insufficient_scope | organization_context_required | organization_not_found | api_access_denied | financial_api_access_denied | resource_not_found | method_not_allowed | not_acceptable | accounting_source_unavailable | currency_aggregation_unavailable | representation_too_large | cursor_expired | uri_too_long | rate_limit_exceeded | internal_error | dependency_unavailable
requestIdrequiredstring
errorsoptionalProblemError[]maxItems: 100
NotAcceptableProblemobject

RFC 9457 Problem Details with stable GrantLink code and request correlation ID.

FieldTypeDescription and constraints
typerequiredstringStable HTTPS documentation URI for this problem type.
titlerequiredstring
statusrequirednumberenum: 406
detailrequiredstring
instancerequiredstring
coderequiredstringenum: invalid_path | invalid_query | invalid_header | invalid_cursor | invalid_token | insufficient_scope | organization_context_required | organization_not_found | api_access_denied | financial_api_access_denied | resource_not_found | method_not_allowed | not_acceptable | accounting_source_unavailable | currency_aggregation_unavailable | representation_too_large | cursor_expired | uri_too_long | rate_limit_exceeded | internal_error | dependency_unavailable
requestIdrequiredstring
errorsoptionalProblemError[]maxItems: 100
ConflictProblemobject

RFC 9457 Problem Details with stable GrantLink code and request correlation ID.

FieldTypeDescription and constraints
typerequiredstringStable HTTPS documentation URI for this problem type.
titlerequiredstring
statusrequirednumberenum: 409
detailrequiredstring
instancerequiredstring
coderequiredstringenum: invalid_path | invalid_query | invalid_header | invalid_cursor | invalid_token | insufficient_scope | organization_context_required | organization_not_found | api_access_denied | financial_api_access_denied | resource_not_found | method_not_allowed | not_acceptable | accounting_source_unavailable | currency_aggregation_unavailable | representation_too_large | cursor_expired | uri_too_long | rate_limit_exceeded | internal_error | dependency_unavailable
requestIdrequiredstring
errorsoptionalProblemError[]maxItems: 100
GoneProblemobject

RFC 9457 Problem Details with stable GrantLink code and request correlation ID.

FieldTypeDescription and constraints
typerequiredstringStable HTTPS documentation URI for this problem type.
titlerequiredstring
statusrequirednumberenum: 410
detailrequiredstring
instancerequiredstring
coderequiredstringenum: invalid_path | invalid_query | invalid_header | invalid_cursor | invalid_token | insufficient_scope | organization_context_required | organization_not_found | api_access_denied | financial_api_access_denied | resource_not_found | method_not_allowed | not_acceptable | accounting_source_unavailable | currency_aggregation_unavailable | representation_too_large | cursor_expired | uri_too_long | rate_limit_exceeded | internal_error | dependency_unavailable
requestIdrequiredstring
errorsoptionalProblemError[]maxItems: 100
UriTooLongProblemobject

RFC 9457 Problem Details with stable GrantLink code and request correlation ID.

FieldTypeDescription and constraints
typerequiredstringStable HTTPS documentation URI for this problem type.
titlerequiredstring
statusrequirednumberenum: 414
detailrequiredstring
instancerequiredstring
coderequiredstringenum: invalid_path | invalid_query | invalid_header | invalid_cursor | invalid_token | insufficient_scope | organization_context_required | organization_not_found | api_access_denied | financial_api_access_denied | resource_not_found | method_not_allowed | not_acceptable | accounting_source_unavailable | currency_aggregation_unavailable | representation_too_large | cursor_expired | uri_too_long | rate_limit_exceeded | internal_error | dependency_unavailable
requestIdrequiredstring
errorsoptionalProblemError[]maxItems: 100
TooManyRequestsProblemobject

RFC 9457 Problem Details with stable GrantLink code and request correlation ID.

FieldTypeDescription and constraints
typerequiredstringStable HTTPS documentation URI for this problem type.
titlerequiredstring
statusrequirednumberenum: 429
detailrequiredstring
instancerequiredstring
coderequiredstringenum: invalid_path | invalid_query | invalid_header | invalid_cursor | invalid_token | insufficient_scope | organization_context_required | organization_not_found | api_access_denied | financial_api_access_denied | resource_not_found | method_not_allowed | not_acceptable | accounting_source_unavailable | currency_aggregation_unavailable | representation_too_large | cursor_expired | uri_too_long | rate_limit_exceeded | internal_error | dependency_unavailable
requestIdrequiredstring
errorsoptionalProblemError[]maxItems: 100
InternalServerErrorProblemobject

RFC 9457 Problem Details with stable GrantLink code and request correlation ID.

FieldTypeDescription and constraints
typerequiredstringStable HTTPS documentation URI for this problem type.
titlerequiredstring
statusrequirednumberenum: 500
detailrequiredstring
instancerequiredstring
coderequiredstringenum: invalid_path | invalid_query | invalid_header | invalid_cursor | invalid_token | insufficient_scope | organization_context_required | organization_not_found | api_access_denied | financial_api_access_denied | resource_not_found | method_not_allowed | not_acceptable | accounting_source_unavailable | currency_aggregation_unavailable | representation_too_large | cursor_expired | uri_too_long | rate_limit_exceeded | internal_error | dependency_unavailable
requestIdrequiredstring
errorsoptionalProblemError[]maxItems: 100
ServiceUnavailableProblemobject

RFC 9457 Problem Details with stable GrantLink code and request correlation ID.

FieldTypeDescription and constraints
typerequiredstringStable HTTPS documentation URI for this problem type.
titlerequiredstring
statusrequirednumberenum: 503
detailrequiredstring
instancerequiredstring
coderequiredstringenum: invalid_path | invalid_query | invalid_header | invalid_cursor | invalid_token | insufficient_scope | organization_context_required | organization_not_found | api_access_denied | financial_api_access_denied | resource_not_found | method_not_allowed | not_acceptable | accounting_source_unavailable | currency_aggregation_unavailable | representation_too_large | cursor_expired | uri_too_long | rate_limit_exceeded | internal_error | dependency_unavailable
requestIdrequiredstring
errorsoptionalProblemError[]maxItems: 100
ApiWarningobject

A safe warning. Codes are an open vocabulary and arrays contain at most 20 entries.

FieldTypeDescription and constraints
coderequiredstring
messagerequiredstring
AccountingStatusobject

Coarse QuickBooks Online availability and freshness with no realm, token, job, connection, or provider IDs.

FieldTypeDescription and constraints
providerrequiredstringenum: quickbooks_online
statusrequiredstringenum: not_connected | connected | attention_required
sourceDataAsOfrequiredstring | null
lastSuccessfulSyncAtrequiredstring | null
warningsrequiredApiWarning[]maxItems: 20
Moneyobject

An exact, non-exponent decimal amount. JSON numbers are never used for money.

FieldTypeDescription and constraints
amountrequiredstringCanonical two-decimal string for the v1 launch currencies.pattern: ^-?(?:0|[1-9]\d*)\.\d{2}$
currencyrequiredstringUppercase ISO 4217 currency code. GrantLink v1 launches with USD and CAD.pattern: ^[A-Z]{3}$
Periodobject

Required business-date period with inclusive calendar bounds.

FieldTypeDescription and constraints
startDaterequiredstringRFC 3339 full-date calendar value; never interpret it as an instant.pattern: ^\d{4}-\d{2}-\d{2}$
endDaterequiredstringRFC 3339 full-date calendar value; never interpret it as an instant.pattern: ^\d{4}-\d{2}-\d{2}$
NamedResourceobject

Compact relationship to another public resource.

FieldTypeDescription and constraints
idrequiredstringPersisted opaque public identifier. Compare it as an exact case-sensitive string.pattern: ^(?:org_|grt_|fnd_|ini_|rcy_|txn_|bct_|bln_)[A-Za-z0-9_-]{8,100}$ · maxLength: 128
namerequiredstring
GrantSummaryobject

A compact grant portfolio record with canonical FASB type and lifecycle status.

FieldTypeDescription and constraints
idrequiredstringPersisted opaque public identifier. Compare it as an exact case-sensitive string.pattern: ^(?:org_|grt_|fnd_|ini_|rcy_|txn_|bct_|bln_)[A-Za-z0-9_-]{8,100}$ · maxLength: 128
namerequiredstring
grantNumberrequiredstring | null
internalCoderequiredstring | null
typerequiredstringenum: without_donor_restrictions | with_donor_restrictions_time_purpose | with_donor_restrictions_perpetual
statusrequiredstringenum: prospect | applied | awarded | active | closeout | closed | declined | withdrawn
awardAmountrequiredMoney | null
periodrequiredPeriod
funderrequiredNamedResource | null
createdAtrequiredstringRFC 3339 UTC instant with second precision.pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$
updatedAtrequiredstringRFC 3339 UTC instant with second precision.pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$
archivedAtrequiredstring | null
Pageobject

Opaque cursor pagination state. Cursors expire after 24 hours and are bound to operation, organization, normalized query, sort, and limit.

FieldTypeDescription and constraints
limitrequiredintegerminimum: 1 · maximum: 100
hasMorerequiredboolean
nextCursorrequiredstring | null
GrantSummaryCollectionobject

Bounded collection document. A page may end before its item limit when the response byte/read budget is reached.

FieldTypeDescription and constraints
itemsrequiredGrantSummary[]
pagerequiredPage
linksrequiredCollectionLinks
GrantInitiativeobject

A compact initiative relationship. Missing legacy primary/status values project as false/active.

FieldTypeDescription and constraints
idrequiredstringPersisted opaque public identifier. Compare it as an exact case-sensitive string.pattern: ^(?:org_|grt_|fnd_|ini_|rcy_|txn_|bct_|bln_)[A-Za-z0-9_-]{8,100}$ · maxLength: 128
namerequiredstring
coderequiredstring | null
designatedAmountrequiredMoney | null
designatedPercentagerequirednumber | null
primaryrequiredboolean
statusrequiredstringenum: active | completed
Grantobject

Complete safe grant settings with compact relationships and no provider, actor, password, or import fields.

FieldTypeDescription and constraints
idrequiredstringPersisted opaque public identifier. Compare it as an exact case-sensitive string.pattern: ^(?:org_|grt_|fnd_|ini_|rcy_|txn_|bct_|bln_)[A-Za-z0-9_-]{8,100}$ · maxLength: 128
namerequiredstring
grantNumberrequiredstring | null
internalCoderequiredstring | null
typerequiredstringenum: without_donor_restrictions | with_donor_restrictions_time_purpose | with_donor_restrictions_perpetual
statusrequiredstringenum: prospect | applied | awarded | active | closeout | closed | declined | withdrawn
awardAmountrequiredMoney | null
periodrequiredPeriod
funderrequiredNamedResource | null
createdAtrequiredstringRFC 3339 UTC instant with second precision.pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$
updatedAtrequiredstringRFC 3339 UTC instant with second precision.pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$
archivedAtrequiredstring | null
descriptionrequiredstring | null
matchrequiredobject
expenseEligibilityrequiredobject
indirectCostrequiredobject
reportingrequiredobject
federalAwardrequiredobject
fundReceiptStatusrequiredstring | null
awardedAtrequiredstring | null
awardNotificationDaterequiredstring | null
activatedAtrequiredstring | null
closeoutStartedAtrequiredstring | null
closeoutDeadlinerequiredstring | null
closedAtrequiredstring | null
declinedAtrequiredstring | null
withdrawnAtrequiredstring | null
initiativesrequiredGrantInitiative[]
GrantRestrictionPositionobject

Restriction-specific part of a grant financial position. Non-applicable union members are omitted.

Shape: object

GrantFinancialPositionobject

Canonical award, receipt, recorded-spend, coverage, and restriction position. receivedCashLessRecordedSpendAmount is funding coverage, not a bank balance; recorded spend can include unpaid bills and journal entries.

FieldTypeDescription and constraints
grantrequiredNamedResource
currencyrequiredstringUppercase ISO 4217 currency code. GrantLink v1 launches with USD and CAD.pattern: ^[A-Z]{3}$
sourceDataAsOfrequiredstring | null
warningsrequiredApiWarning[]maxItems: 20
awardedAmountrequiredMoney | null
receivedCashAmountrequiredMoney
recordedSpendrequiredobject
remainingAwardAmountrequiredMoney | null
receivedCashLessRecordedSpendAmountrequiredMoney
restrictionrequiredGrantRestrictionPosition
NamedCodedResourceobject

Compact relationship to a named public resource with a required display code.

FieldTypeDescription and constraints
idrequiredstringPersisted opaque public identifier. Compare it as an exact case-sensitive string.pattern: ^(?:org_|grt_|fnd_|ini_|rcy_|txn_|bct_|bln_)[A-Za-z0-9_-]{8,100}$ · maxLength: 128
namerequiredstring
coderequiredstring
GrantTransactionobject

An effective operating-expense assignment, not a raw QuickBooks row. Reclassification or splitting can retire this ID and create new IDs.

FieldTypeDescription and constraints
idrequiredstringPersisted opaque public identifier. Compare it as an exact case-sensitive string.pattern: ^(?:org_|grt_|fnd_|ini_|rcy_|txn_|bct_|bln_)[A-Za-z0-9_-]{8,100}$ · maxLength: 128
grantrequiredNamedResource
accountingDaterequiredstringRFC 3339 full-date calendar value; never interpret it as an instant.pattern: ^\d{4}-\d{2}-\d{2}$
sourceTyperequiredstringLowercase snake-case provider entity kind; this is an open vocabulary.
referencerequiredstring | null
counterpartyrequiredstring | null
memorequiredstring | null
amountrequiredMoney
costTyperequiredstringenum: direct | indirect
initiativerequiredNamedResource | null
budgetCategoryrequiredNamedCodedResource | null
budgetLinerequiredNamedResource | null
GrantTransactionCollectionobject

Bounded effective assignments with accounting-source freshness and safe warnings.

FieldTypeDescription and constraints
grantrequiredNamedResource
sourceDataAsOfrequiredstring | null
warningsrequiredApiWarning[]maxItems: 20
itemsrequiredGrantTransaction[]
pagerequiredPage
linksrequiredCollectionLinks
FunderSummaryobject

A safe funder directory record with contact data excluded.

FieldTypeDescription and constraints
idrequiredstringPersisted opaque public identifier. Compare it as an exact case-sensitive string.pattern: ^(?:org_|grt_|fnd_|ini_|rcy_|txn_|bct_|bln_)[A-Za-z0-9_-]{8,100}$ · maxLength: 128
namerequiredstring
shortNamerequiredstring | null
typerequiredstring | null
createdAtrequiredstringRFC 3339 UTC instant with second precision.pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$
updatedAtrequiredstringRFC 3339 UTC instant with second precision.pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$
archivedAtrequiredstring | null
FunderSummaryCollectionobject

Bounded collection document. A page may end before its item limit when the response byte/read budget is reached.

FieldTypeDescription and constraints
itemsrequiredFunderSummary[]
pagerequiredPage
linksrequiredCollectionLinks
Funderobject

Complete public funder details. Contact name, email, and phone are intentionally excluded in v1.0.

FieldTypeDescription and constraints
idrequiredstringPersisted opaque public identifier. Compare it as an exact case-sensitive string.pattern: ^(?:org_|grt_|fnd_|ini_|rcy_|txn_|bct_|bln_)[A-Za-z0-9_-]{8,100}$ · maxLength: 128
namerequiredstring
shortNamerequiredstring | null
typerequiredstring | null
createdAtrequiredstringRFC 3339 UTC instant with second precision.pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$
updatedAtrequiredstringRFC 3339 UTC instant with second precision.pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$
archivedAtrequiredstring | null
descriptionrequiredstring | null
websiterequiredstring | null
NullablePeriodobject

Business-date period whose independently unknown bounds are represented by null.

FieldTypeDescription and constraints
startDaterequiredstring | null
endDaterequiredstring | null
InitiativeSummaryobject

A compact initiative record. The public API never calls this resource a program.

FieldTypeDescription and constraints
idrequiredstringPersisted opaque public identifier. Compare it as an exact case-sensitive string.pattern: ^(?:org_|grt_|fnd_|ini_|rcy_|txn_|bct_|bln_)[A-Za-z0-9_-]{8,100}$ · maxLength: 128
namerequiredstring
coderequiredstring | null
functionalCategoryrequiredstring | null
statusrequiredstring | null
periodrequiredNullablePeriod
targetAmountrequiredMoney | null
restrictionTyperequiredstring | null
parentrequiredNamedResource | null
createdAtrequiredstringRFC 3339 UTC instant with second precision.pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$
updatedAtrequiredstringRFC 3339 UTC instant with second precision.pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$
archivedAtrequiredstring | null
InitiativeSummaryCollectionobject

Bounded collection document. A page may end before its item limit when the response byte/read budget is reached.

FieldTypeDescription and constraints
itemsrequiredInitiativeSummary[]
pagerequiredPage
linksrequiredCollectionLinks
Initiativeobject

Complete initiative details with internal display and provider-link fields excluded.

FieldTypeDescription and constraints
idrequiredstringPersisted opaque public identifier. Compare it as an exact case-sensitive string.pattern: ^(?:org_|grt_|fnd_|ini_|rcy_|txn_|bct_|bln_)[A-Za-z0-9_-]{8,100}$ · maxLength: 128
namerequiredstring
coderequiredstring | null
functionalCategoryrequiredstring | null
statusrequiredstring | null
periodrequiredNullablePeriod
targetAmountrequiredMoney | null
restrictionTyperequiredstring | null
parentrequiredNamedResource | null
createdAtrequiredstringRFC 3339 UTC instant with second precision.pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$
updatedAtrequiredstringRFC 3339 UTC instant with second precision.pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$
archivedAtrequiredstring | null
descriptionrequiredstring | null
ReportingCycleobject

A reporting deadline and workflow state without internal notes, reminders, feedback, or actor data.

FieldTypeDescription and constraints
idrequiredstringPersisted opaque public identifier. Compare it as an exact case-sensitive string.pattern: ^(?:org_|grt_|fnd_|ini_|rcy_|txn_|bct_|bln_)[A-Za-z0-9_-]{8,100}$ · maxLength: 128
grantrequiredNamedResource
periodrequiredPeriod
dueDaterequiredstringRFC 3339 full-date calendar value; never interpret it as an instant.pattern: ^\d{4}-\d{2}-\d{2}$
typerequiredstringenum: interim | annual | final | custom
customLabelrequiredstring | null
statusrequiredstringenum: upcoming | due | overdue | in_progress | ready_for_review | submitted | accepted | revision_requested | skipped
submittedAtrequiredstring | null
ReportingCycleCollectionobject

Bounded collection document. A page may end before its item limit when the response byte/read budget is reached.

FieldTypeDescription and constraints
itemsrequiredReportingCycle[]
pagerequiredPage
linksrequiredCollectionLinks

Need to plan an integration?

Access and credential policy are not generally available yet. Talk to GrantLink about your use case and rollout constraints.

Contact GrantLink