Part III (B): Submission via JSON
Introduction
A JSON endpoint of grant data is one method available to sync your agency or department’s grant information with this portal. This method is ideal for departments with IT staff comfortable supporting JSON file development that aren’t using WordPress. Using this method, you’ll create a public JSON endpoint that contains your grant data following the specification defined below. Once this endpoint is available and contains at least one grant, an approved grant contributor can register your endpoint on the Grants Portal.
Once an endpoint has been registered, the portal will periodically (once per 24 hours) perform a /GET request to your endpoint to check for changes or additions to your grant data. If new grants, or updates to existing grants, are identified, the portal will update the information on the portal to reflect those.
JSON Specification
Your endpoint must return valid JSON and be publicly accessible from the internet. The response must contain an array of one or more grants objects.
EXAMPLE JSON RESPONSE
GRANT RESPONSE
[
{
"grantTitle": "Example Grant",
"uniqueID": 29,
"awardStats": [
{
"fiscalYear": "2022-2023",
"applicationsSubmitted": 1,
"grantsAwarded": 1,
},
{
"fiscalYear": "2021-2022",
"applicationsSubmitted": 1,
"grantsAwarded": 1,
},
{
"fiscalYear": "2020-2021",
"applicationsSubmitted": 1,
"grantsAwarded": 1,
}
],
"grantID": "example-grant",
"isForecasted": "active",
"opportunityType": [ "grant" ],
"loiRequired": true,
"grantCategories": [
"agriculture",
"disadvantaged-communities",
"disaster-prevention-relief"
],
"categorySuggestions": "",
"purpose": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr...",
"description": "Stet clita kasd gubergren, no sea takimata sanctus...",
"applicantType": {
"type": [
"business",
"individual"
],
"notes": "Sed diam nonumy eirmod tempor invidunt ut labore et dolore..."
},
"geoLimitations": "No geographic limitations.",
"fundingSource": {
"type": "federal",
"notes": "This is a federally funded grant."
},
"matchingFunds": {
"required": false,
"percent": 0,
"notes": ""
},
"totalEstimatedFunding": "exactFundingAmount",
"estimatedAvailableFunds": "10000",
"estimatedAvailableFundNotes": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr...",
"estimatedAwards": {
"exact": 1
},
"estimatedAmounts": {
"same": 10000
},
"fundingMethod": {
"type": "advances-and-reimbursements",
"notes": ""
},
"openDate": "2020-07-04T00:00",
"anticipatedOpenDate": "",
"periodOfPerformance": "12 days",
"expectedAwardDate": "November, 2020",
"deadline": "2021-07-04T23:59",
"electronicSubmission": {
"type": "url",
"url": "https://grantsportal.test.com/"
},
"details": "https://grantsportal.test.com/",
"agencyURL": "https://grantsportal.test.com/",
"subscribe": "https://grantsportal.test.com/",
"events": "https://grantsportal.test.com/",
"contactInfo": {
"name": "John Doe",
"email": "noreply@castlg-stage.10upmanaged.com",
"tel": "1-555-555-5555"
},
"internalContactInfo": [
{
"name": "Jane Doe",
"email": "noreply@grantsportal.test.com",
"tel": "1-555-555-5555",
"primary": true
},
{
"name": "Jack Doe",
"email": "noreply@grantsportal.test.com",
"tel": "1-555-555-5555"
}
],
"_links": {
"award": [
{
"href": "https://grantsportal.test.com/json-endpoint/grant-awards-29.json"
}
]
}
}
]
GRANT Award RESPONSE
[
{
"uniqueID": 76,
"grantID": 29,
"fiscalYear": "2022-2023",
"projectTitle": "Grant Award Title",
"recipientType": "business",
"primaryRecipientName": "Award Recipient Name",
"primaryRecipientFirstName": "Example",
"primaryRecipientLastName": "Grant Award",
"secondaryRecipients": "no",
"totalAwardAmount": 1000000,
"totalAwardUsed": 10000,
"matchingFundingAmount": 1000,
"awardAmountNotes": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr...",
"grantFundedStartDate": "2022-06-03T14:06",
"grantFundedEndDate": "2022-08-03T14:08",
"projectAbstract": "Lorem ipsum dolor sit amet, consetetur sadipscing...",
"geoLocationServed": "county",
"countiesServed": [
"amador"
],
"geoServedNotes": "Lorem ipsum dolor sit amet, consetetur sadipscing...",
"awardCancellingNotes": "Lorem ipsum dolor sit amet, consetetur sadipscing..."
}
]
GRANT SCHEMA
grantTitle
| Description | The title of the grant opportunity. This should be identical to the name for the grant opportunity on your own website, RFP/A, etc. If this is an annually posted grant, add the year to the end of the title to ensure the title is unique. |
| Type | String |
| Required? | Yes. |
Example:
{
...
"grantTitle": "My Grant Title",
...
}
uniqueID
| Description | A unique ID for your grant. Is not used by the portal, but included in the specification so you may identify your grants within an internal system. If you do not have a unique ID that your department uses, please create one. |
| Type | String |
| Required? | Yes |
Example:
{
...
"uniqueID": "grant-101",
...
}
awardStats
| Description | An object representing grant award stats information. Refer to the object details and example below for more information. |
| Type | |
| Required? | Yes, once the award statistics and awardee information is finalized to publish. |
awardStats Object:
| Field | Type | Required? | Description | Valid Values |
| fiscalYear | string | No | The fiscal year to save the number of applications and grants awarded for. | “2021-2022”, “2022-2023”, “2023-2024” |
| applicationsSubmitted | Integer | No | The total applications received for this funding opportunity. | – |
| grantsAwarded | Integer | No | Enter the number of individual grants awarded for this grant opportunity. Please update if changes are made in the grant agreement. | – |
Example:
{
...
"awardStats": [
{
"fiscalYear": "2022-2023",
"applicationsSubmitted": 1,
"grantsAwarded": 1,
},
{
"fiscalYear": "2021-2022",
"applicationsSubmitted": 1,
"grantsAwarded": 1,
},
{
"fiscalYear": "2020-2021",
"applicationsSubmitted": 1,
"grantsAwarded": 1,
}
],
...
}
isForecasted
| Description | Whether the grant is active, or forecasted. Forecasted grants require less information to be included. |
| Type | String |
| Required? | Yes |
| Valid values | active, forecasted |
Example:
{
...
"isForecasted": "active",
...
}
opportunityType
| Description | The types of opportunity. |
| Type | Array[<String>] |
| Required? | Yes |
| Valid values | grant, loan |
Example:
{
...
"opportunityType": [ "grant", "loan" ],
...
}
loiRequired
| Description | Whether a letter of intent is required to be submitted with this grant. |
| Type | Boolean |
| Required? | Active grants only |
Example:
{
...
"loiRequired": true,
...
}
grantCategories
| Description | An array of categories to associate with this grant. See Valid Items below for a list of the category IDs you can use. |
| Type | Array[<String>] |
| Required? | Active grants only |
| Valid values | agriculture, animal-services, consumer-protection, disadvantaged-communities, disaster-prevention-relief, education, employment-labor-training, energy, environment-water, food-nutrition, health-human-services, housing-community-economic-development, law-justice-legal-services, libraries-arts, parks-recreation, science-technology-research-development, transportation, veterans-military |
| Additional Notes | If you’d like to make a suggestion that an additional category be supported, see categorySuggestions below. |
Example:
{
...
"grantCategories": [
"agriculture",
"energy"
],
...
}
categorySuggestions
| Description | If the supported categories do not sufficiently describe the opportunity, you may suggest an additional category be considered for support. If you have more than one suggestion, please separate them with commas. |
| Type | String |
| Required? | No |
Example:
{
...
"categorySuggestions": "Astronomy, Ornithology",
...
}
purpose
| Description | The purpose of the grant. |
| Type | String (maximum 450 characters) |
| Required? | Active grants only |
Example:
{
...
"purpose": "Lorem ipsum dolor sit amet.",
...
}
description
| Description | A description of the grant. |
| Type | String (maximum 3200 characters) |
| Required? | Yes |
Example:
{
...
"description": "Lorem ipsum dolor sit amet.",
...
}
applicantType
| Description | An object representing the type of applicant for this grant. Refer to the object details and example below for more information. |
| Type | Object |
| Required? | Active grants only |
applicantType Object:
| Field | Type | Required? | Description | Valid Values |
| type | Array[<String>] | Yes | The allowed applicant types. | business, individual, nonprofit, other legal entity, public-agency, tribal-government |
| notes | string (max 450 characters) | No | Notes about the allowed applicant types. | – |
Example:
{
...
"applicantType": {
"type": [
"business",
"individual"
],
"notes": "Lorem ipsum dolor sit amet."
},
...
}
geoLimitations
| Description | Notes on any geographic limitations for the grant. |
| Type | String (max 450 characters) |
| Required? | No |
Example:
{
...
"geoLimitations": "Only businesses headquartered in California may apply.",
...
}
fundingSource
| Description | An object representing the funding source of a grant. Refer to the object details and example below for more information. Note: If you selected “Other”, please outline the funding source details in the notes section below. |
| Type | Object |
| Required? | Active grants only |
fundingSource Object
| Field | Type | Required? | Description | Valid Values |
| type | | Yes | The revenue source. See valid values for allowed revenue types. | federal, state, federal and state, other |
| notes | | Only if “other” is selected. | Notes about the revenue type. This is required field if “other” is selected. | – |
Example:
{
...
"fundingSource": {
"type": "federal",
"notes": "Lorem ipsum dolor sit amet."
},
...
}
matchingFunds
| Description | An object to describe if matching funds are required, at what percent, and any additional information. Refer to the object details and example below for more information. |
| Type | Object |
| Required? | Active grants only |
matchingFunds Object
| Field | Type | Required? | Description |
| required | | Yes | Whether matching strings are required. |
| percent | | Only if required is true. | The percent of the funds that are required to be matched. |
| notes | String (max 450 characters) | No | Additional notes to help applicants understand the matching funds requirement. |
Example:
{
...
"matchingFunds": {
"required": true,
"percent": 50,
"notes": "Requires match of 50% of grant awarded."
},
...
}
totalEstimatedFunding
| Description | Total Estimated Available Funding for the grant. If you have an estimated dollar amount, please select “exactFundingAmount” as your valid value and enter in the dollar amount in the field below “estimatedAvailableFunds.” Otherwise, please select “fundingAmountNotes” and enter the notes in the field below “estimatedAvailableFundNotes.” |
| Type | String |
| Required? | Active grants only |
| Valid values | exactFundingAmount, fundingAmountNotes |
Example:
{
...
"totalEstimatedFunding": "exactFundingAmount",
...
}
estimatedAvailableFunds
| Description | The estimated dollar amount of the available funds, rounded to the dollar. |
| Type | Integer |
| Required? | Active grants only |
Example:
{
...
"estimatedAvailableFunds": 10000,
...
}
estimatedAvailableFundNotes
| Description | Available funding notes for the grant when exact funding amount is not available for grant. |
| Type | String (max 450 characters) |
| Required? | Required when “totalEstimatedFunding” value is “fundingAmountNotes” |
Example:
{
...
"estimatedAvailableFundNotes": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr...",
...
}
estimatedAwards
| Description | An object describing how the grant will be awarded. |
| Type | Object |
| Required? | Active grants only |
Valid Values: Required one of following value.
| Value | Type | Description |
| “exact” | Integer | Exact value of estimated awards. |
| “between” | Array[<Integer>] | Range of estimated awards with range values in number, |
| “dependent” | String | Dependent on number of awards, |
Example:
“between”:
{
...
"estimatedAwards": {
"between":[ 0, 100 ]
},
...
}
“exact”:
{
...
"estimatedAwards": {
"exact": 100
},
...
}
“dependent”:
{
...
"estimatedAwards": {
"dependent": "Dependant on number of awards."
},
...
}
estimatedAmounts
| Description | An object describing the fund amounts the grant will be awarding. |
| Type | Object |
| Required? | Active grants only |
Valid Values: Required one of following value.
| Value | Type | Description |
| “same” | Integer | Use this type if the grant beneficiaries will receive the same or equal amount. The value should be the amount that is awarded. |
| “range” | Array[<Integer>] | Use this type if the awarded amounts will fall within a range, where the first value is the minimum amount and the second value is the maximum. |
| “dependent” | String | Use this type if the amount of the funds awarded is dependent on the number of applications submissions were received, application process, or some other factor. |
Example:
“same”:
{
...
"estimatedAmounts": {
"same": 10000
},
...
}
“range”:
{
...
"estimatedAwards": {
"range": [ 5000, 1000 ]
},
...
}
“dependent”:
{
...
"estimatedAwards": {
"dependent": "Depends on the number of applications received"
},
...
}
fundingMethod
| Description | An object describing how the awarded funds will be disbursed. Note: If you selected “Other”, please outline the funding method details in the notes section below. |
| Type | Object |
| Required? | Active grants only |
fundingMethod Object
| Field | Type | Required? | Description | Valid Values |
| type | | Yes | The funding type. See valid values for allowed revenue types. | advances, advances-and-reimbursements, reimbursements, other |
| notes | | Only if “other” is selected. | Notes about the funding method | – |
Example:
{
...
"fundingMethod": {
"type": "advances-and-reimbursements",
"notes": ""
},
...
}
openDate
| Description | The date and time, in ISO-8601 format, that the grant will open. |
| Type | String |
| Required? | Yes |
Example:
{
...
"openDate": "2020-07-04T00:00",
...
}
anticipatedOpenDate
| Description | Anticipated Open Date for the Forecasted Grant. You can use things like “Q1” or “Summer 2020”. |
| Type | String |
| Required? | Forecasted grants only. |
Example:
{
...
"anticipatedOpenDate": "Summer 2020",
...
}
periodOfPerformance
| Description | The period of performance. |
| Type | String (maximum 20 characters) |
| Required? | Active grants only |
Example:
{
...
"periodOfPerformance": "12 weeks.",
...
}
expectedAwardDate
| Description | The expected date the grant will be awarded. This is an open text field to accept non-exact times like, “3rd Quarter 2021”. |
| Type | String (maximum 20 characters) |
| Required? | Active grants only |
Example:
{
...
"expectedAwardDate": "Q3 2021",
...
}
deadline
| Description | The application deadline date and time, in ISO-8601 format. When grants close at midnight, the grant details page will display 00:00, which can be confusing for users. If possible, use “23:59” (11:59pm) for clarity. |
| Type | String |
| Required? | No |
Example:
{
...
"deadline": "2021-07-04T23:59",
...
}
electronicSubmission
| Description | Object containing one of, or both, “email” and “url” keys. Describes the electronic method where an applicant can submit an application. Refer to the example below for proper schema. |
| Type | Object |
| Required? | Active grants only |
electronicSubmission Object
| Field | Type | Required? | Description | Valid Values |
| type | | Yes | Application submitted electronic method type. | none, url, email |
| url | | Only when type value is “url” | Url to electronically submit application. | – |
| Only when type value is “email” | Email Id to electronically submit application. | – |
Example:
{
...
"electronicSubmission": {
"type": "none"
},
...
}
{
...
"electronicSubmission": {
"type": "url",
"url": "https://www.grants.ca.gov"
},
...
}
{
...
"electronicSubmission": {
"type": "email",
"email": "noreply@grantsportal.test.com"
},
...
}
details
| Description | A URL where more details about the grant can be found. |
| Type | String |
| Required? | Active grants only |
Example:
{
...
"details": "https://www.grants.ca.gov/",
...
}
agencyURL
| Description | A URL where more details about the grant maker can be found. |
| Type | String |
| Required? | Active grants only |
Example:
{
...
"agencyURL": "https://www.grants.ca.gov/",
...
}
subscribe
| Description | A URL where more updates about the grant can be found. |
| Type | String |
| Required? | No |
Example:
{
...
"subscribe": "https://www.grants.ca.gov/",
...
}
events
| Description | A URL where information about planned events surrounding the grant can be found. |
| Type | String |
| Required? | No |
Example:
{
...
"events": "https://www.grants.ca.gov/",
...
}
contactInfo
| Description | An object to describe the public contact information where applicants can direct questions about the grant. |
| Type | Object |
| Required? | Active grants only |
contactInfo Object
| Field | Type | Required? | Description |
| name | | No | Name of the individual that can be contacted regarding the grant opportunity |
| Yes | The email address for the contact. | |
| tel | | Yes | The telephone number of the contact. |
Example:
{
...
"contactInfo": {
"name": "John Doe",
"email": "noreply@castlg-stage.10upmanaged.com",
"tel": "1-555-555-5555"
},
...
}
internalContactInfo
| Description | An array of objects to describe the internal contact information where other agencies or departments can direct questions. |
| Type | Array[<object>] |
| Required? | Active grants only |
internalContactInfo Object
| Field | Type | Required? | Description |
| name | | Yes | Name of the individual that can be contacted regarding the grant opportunity |
| Yes | The email address for the contact. | |
| tel | | Yes | The telephone number of the contact. |
| primary | Boolean | No | Whether this contact is the primary contact. If this value is not present, the first listed contact will be deemed the primary. |
Example:
{
...
"internalContactInfo": [
{
"name": "John Doe",
"email": "noreply@grants.ca.gov",
"tel": "1-555-555-5555",
"primary": true
},
{
"name": "Jane Doe",
"email": "noreply@grants.ca.gov",
"tel": "1-555-555-5555"
},
],
...
}
_links
| Description | All associated links for the grant, used for adding link for grant award json endpoint link for associated grant. Note: awardStats field is required if using this field. |
| Type | Object |
| Required? | No |
| Valid Value | Grant award json endpoint url in “href” value. Please refer to the example below on where and how url should be added in “_links” |
Example:
{
...
"_links": {
"award": [
{
"href": "https://grantsportal.test.com/json-endpoint/grant-awards-29.json"
}
]
},
...
}
GRANT Award SCHEMA
uniqueID
| Description | A unique ID is typically numbers, letters or a combination of letters or numbers that the state department uses to identify the grant award. If your department does not use a Unique ID for grant award, please create one. |
| Type | String |
| Required? | Yes |
Example:
{
...
"uniqueID": "76",
...
}
grantID
| Description | This will be the same value as “uniqueID” entered at the initial entry of the associated grant opportunity from the endpoint. This ID will be used to connect grant awards to the specific grant. |
| Type | String |
| Required? | Yes |
Example:
{
...
"grantID": "29",
...
}
fiscalYear
| Description | Fiscal year for the grant award. This value should match from awardStats data of associated Grant. |
| Type | String |
| Required? | Yes |
Example:
{
...
"fiscalYear": "2022-2023",
...
}
projectTitle
| Description | Project title for the award. The project title must match the title provided in the application. |
| Type | String (maximum 300 characters) |
| Required? | No |
Example:
{
...
"projectTitle": "Grant Award Title",
...
}
recipientType
| Description | Indicate the recipient type, or the recipient type of the primary awardee if multiple awardees. |
| Type | String |
| Required? | Yes |
| Valid Values | business, individual, nonprofit, other-legal-entity, public-agency, tribal-government |
Example:
{
...
"recipientType": "business",
...
}
primaryRecipientName
| Description | Provide the award recipient’s name (legal name of the principal investigator, project lead, or institution name), or the name of the primary awardee if multiple recipients. Please update this if changes are made in the grant agreement. |
| Type | String (maximum 200 characters) |
| Required? | Only if recipientType value is other than “individual”. |
Example:
{
...
"primaryRecipientName": "Award Recipient Name",
...
}
primaryRecipientFirstName
| Description | Provide the award recipient’s first name, or the first name of the primary awardee if multiple recipients. Please update if changes are made in the grant agreement. |
| Type | String (maximum 100 characters) |
| Required? | Only if recipientType value is “individual”. |
Example:
{
...
"primaryRecipientFirstName": "Example",
...
}
primaryRecipientLastName
| Description | Provide the award recipient’s last name, or the last name of the primary awardee if multiple recipients. Please update if changes are made in the grant agreement. |
| Type | String (maximum 200 characters) |
| Required? | Only if recipientType value is “individual”. |
Example:
{
...
"primaryRecipientLastName": "Grant Award",
...
}
secondaryRecipients
| Description | Indicate if additional recipients (e.g. sub, secondary, or co-recipients/grantees) were listed in the application. |
| Type | String |
| Required? | Yes |
| Valid values | yes, no |
Example:
{
...
"secondaryRecipients": "no",
...
}
totalAwardAmount
| Description | Enter the dollar amount awarded to the recipient, as listed on the grant agreement – think of this as the “grant cost” rather than the “project cost”. Note: Please update if the award amount gets augmented in the grant agreement (however, updates are not required if award amount changes are not reflected in an updated agreement). |
| Type | String |
| Required? | Yes |
Example:
{
...
"totalAwardAmount": 1000000,
...
}
totalAwardUsed
| Description | Total dollar amount used by the recipient through this grant or loan. Enter the dollar amount recipient used before cancelling the project. If no dollar amount used, enter “0”. |
| Type | String |
| Required? | Yes if the award is cancelled |
Example:
{
...
"totalAwardUsed": 10000,
...
}
matchingFundingAmount
| Description | If partial or full matching is requested or required by the agreement or voluntarily contributed by the awardee, enter the matched funding dollar amount. If no matched funding is contributed enter “0”. Update if changes are made in the grant agreement. |
| Type | String |
| Required? | Yes |
Example:
{
...
"matchingFundingAmount": 1000,
...
}
awardAmountNotes
| Description | Provide any additional details, including: exceptions, amount or source (state, federal, in-kind, etc.) limitations, and matching funding percentage, if applicable. |
| Type | String (maximum 300 characters) |
| Required? | Yes |
Example:
{
...
"awardAmountNotes": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr...",
...
}
grantFundedStartDate
| Description | Beginning Date of Grant-Funded Project, in ISO-8601 format. |
| Type | String |
| Required? | Yes |
Example:
{
...
"grantFundedStartDate": "2022-06-03T14:06",
...
}
grantFundedEndDate
| Description | End Date of Grant-Funded Project, in ISO-8601 format. |
| Type | String |
| Required? | Yes |
Example:
{
...
"grantFundedEndDate": "2022-08-03T14:08",
...
}
projectAbstract
| Description | Provide a brief outline of the project purpose, priorities, scope of this opportunity, and grant beneficiaries. Beneficiaries include any communities, persons, or entities that benefit from this funding. Please update if changes are made in the grant agreement. |
| Type | String (maximum 600 characters) |
| Required? | Yes |
Example:
{
...
"projectAbstract": "Lorem ipsum dolor sit amet, consetetur sadipscing...",
...
}
geoLocationServed
| Description | The geographic region of the state served by the grant, including the designated local jurisdiction. Select the geographic location the grant serves. This should be the area served by the funds. Update if changes are made in the grant agreement. |
| Type | String |
| Required? | Yes |
| Valid values | county, statewide, out-of-state |
Example:
{
...
"geoLocationServed": "county",
...
}
countiesServed
| Description | Counties Served, If “County” is selected in the Geographic Location Served field, add all relevant California counties. |
| Type | |
| Required? | Yes |
| Valid Values | alameda, alpine, amador, butte, calaveras, colusa, contra-costa, del-norte, el-dorado, fresno, glenn, humboldt, imperial, inyo, kern, kings, lake, lassen, los-angeles, madera, marin, mariposa, mendocino, merced, modoc, mono, monterey, napa, nevada, orange, placer, plumas, riverside, sacramento, san-benito, san-bernardino, san-diego, san-francisco, san-joaquin, san-luis-obispo, san-mateo, santa-barbara, santa-clara, santa-cruz, shasta, sierra, siskiyou, solano, sonoma, stanislaus, sutter, tehama, trinity, tulare, tuolumne, ventura, yolo, yuba |
Example:
{
...
"countiesServed": [
"amador"
],
...
}
geoServedNotes
| Description | Additional details about the geographic location served. Provide details about geographic locations served by this grant opportunity, with emphasis on priority communities, underserved areas, or communities impacted by and benefiting from the funding. |
| Type | String (maximum 300 characters) |
| Required? | Yes |
Example:
{
...
"geoServedNotes": "Lorem ipsum dolor sit amet, consetetur sadipscing..."
...
}
awardCancellingNotes
| Description | Provide a brief summary on why this grant award is cancelled. Note: this field is publicly available for grantees. |
| Type | String (maximum 300 characters) |
| Required? | Yes if the award is cancelled |
Example:
{
...
"awardCancellingNotes": "Lorem ipsum dolor sit amet, consetetur sadipscing..."
...
}
Last Updated: 11/12/2024