Opportunity
OpportunityBase
Section titled “OpportunityBase”A funding opportunity, such as a grant or loan.
Property | Type | Required | Description |
---|---|---|---|
id | uuid | Yes | Globally unique id for the opportunity |
title | string | Yes | Title or name of the funding opportunity |
status | OppStatus | Yes | Status of the opportunity |
description | string | Yes | Description of the opportunity’s purpose and scope |
funding | OppFunding | No | Details about the funding available |
keyDates | OppTimeline | No | Key dates for the opportunity |
source | url | No | URL for the original source of the opportunity |
customFields | Record<CustomField> | No | Additional custom fields specific to this opportunity |
createdAt | utcDateTime | Yes | The timestamp (in UTC) at which the record was created |
lastModifiedAt | utcDateTime | Yes | The timestamp (in UTC) at which the record was last modified |
Formats
Section titled “Formats”A JSON example of this model.
{ "id": "049b4b15-f219-4037-901e-cd95ac32fbc8", "title": "Healthcare Innovation Research Grant", "description": "Funding for innovative healthcare delivery solutions", "status": { "value": "open", "description": "Opportunity is actively accepting applications" }, "funding": { "totalAmountAvailable": { "amount": "1000000.00", "currency": "USD" }, "minAwardAmount": { "amount": "10000.00", "currency": "USD" }, "maxAwardAmount": { "amount": "50000.00", "currency": "USD" }, "minAwardCount": 5, "maxAwardCount": 20, "estimatedAwardCount": 10 }, "keyDates": { "postDate": { "name": "Opportunity posted", "eventType": "singleDate", "date": "2024-03-01", "description": "Opportunity is posted publicly" }, "closeDate": { "name": "Opportunity closed", "eventType": "singleDate", "date": "2024-04-30", "description": "Opportunity is closed to all applications" }, "otherDates": { "anticipatedAward": { "name": "Anticipated award date", "eventType": "singleDate", "date": "2025-03-15", "description": "When we expect to announce awards for this opportunity." }, "applicationPeriod": { "name": "Application period", "eventType": "dateRange", "startDate": "2024-03-01", "endDate": "2024-04-30", "description": "Applications are accepted during this period" } } }, "source": "https://grants.gov/opportunity/123", "acceptedApplicantTypes": ["individual", "organization"], "customFields": { "programArea": { "name": "programArea", "type": "string", "value": "Healthcare Technology", "description": "The primary focus area for this grant" }, "eligibilityType": { "name": "eligibilityType", "type": "string", "value": "Non-profit organizations", "description": "The type of organizations eligible to apply" } }, "createdAt": "2024-02-28T12:00:00Z", "lastModifiedAt": "2024-02-28T12:00:00Z"}
The JSON Schema for this model.
$schema: https://json-schema.org/draft/2020-12/schema$id: OpportunityBase.yamltype: objectproperties: id: $ref: uuid.yaml description: Globally unique id for the opportunity title: type: string examples: - Small business grant program description: Title or name of the funding opportunity status: $ref: OppStatus.yaml description: Status of the opportunity description: type: string examples: - This program provides funding to small businesses to help them grow and create jobs description: Description of the opportunity's purpose and scope funding: $ref: OppFunding.yaml description: Details about the funding available keyDates: $ref: OppTimeline.yaml description: Key dates for the opportunity, such as when the application opens and closes acceptedApplicantTypes: type: array items: $ref: ApplicantType.yaml description: The type of applicant for the opportunity source: type: string format: uri description: URL for the original source of the opportunity customFields: $ref: "#/$defs/RecordCustomField" description: Additional custom fields specific to this opportunity createdAt: type: string format: date-time description: The timestamp (in UTC) at which the record was created. lastModifiedAt: type: string format: date-time description: The timestamp (in UTC) at which the record was last modified.required: - id - title - status - description - createdAt - lastModifiedAtdescription: A funding opportunity$defs: RecordCustomField: type: object properties: {} unevaluatedProperties: $ref: CustomField.yaml
The TypeSpec code for this model.
model OpportunityBase { /** Globally unique id for the opportunity */ @visibility(Lifecycle.Read) id: uuid;
/** Title or name of the funding opportunity */ @example("Small business grant program") title: string;
/** Status of the opportunity */ status: OppStatus;
/** Description of the opportunity's purpose and scope */ @example("This program provides funding to small businesses to help them grow and create jobs") description: string;
/** Details about the funding available */ funding?: OppFunding;
/** Key dates for the opportunity, such as when the application opens and closes */ keyDates?: OppTimeline;
/** The type of applicant for the opportunity */ @Versioning.added(CommonGrants.Versions.v0_2) acceptedApplicantTypes?: ApplicantType[];
/** URL for the original source of the opportunity */ source?: url;
/** Additional custom fields specific to this opportunity */
The Python code for this model.
class OpportunityBase(SystemMetadata, CommonGrantsBaseModel): """Base model for a funding opportunity with all core fields."""
id: UUID = Field(..., description="Globally unique id for the opportunity") title: str = Field(..., description="Title or name of the funding opportunity") status: OppStatus = Field(..., description="Status of the opportunity") description: str = Field( ..., description="Description of the opportunity's purpose and scope", ) funding: Optional[OppFunding] = Field( default=None, description="Details about the funding available", ) key_dates: Optional[OppTimeline] = Field( default=None, alias="keyDates", description="Key dates for the opportunity, such as when the application opens and closes", ) source: Optional[HttpUrl] = Field( default=None, description="URL for the original source of the opportunity", ) custom_fields: Optional[dict[str, CustomField]] = Field( default=None, alias="customFields", description="Additional custom fields specific to this opportunity", )
OpportunityDetails
Section titled “OpportunityDetails”A funding opportunity with additional details, like available competitions.
Property | Type | Required | Description |
---|---|---|---|
id | uuid | Yes | Globally unique id for the opportunity |
title | string | Yes | Title or name of the funding opportunity |
status | OppStatus | Yes | Status of the opportunity |
description | string | Yes | Description of the opportunity’s purpose and scope |
funding | OppFunding | No | Details about the funding available |
keyDates | OppTimeline | No | Key dates for the opportunity |
source | url | No | URL for the original source of the opportunity |
acceptedApplicantTypes | ApplicantType | No | The types of applicants that are accepted for this opportunity |
competitions | CompetitionBase | No | The competitions associated with the opportunity |
customFields | Record<CustomField> | No | Additional custom fields specific to this opportunity |
createdAt | utcDateTime | Yes | The timestamp (in UTC) at which the record was created |
lastModifiedAt | utcDateTime | Yes | The timestamp (in UTC) at which the record was last modified |
Formats
Section titled “Formats”A JSON example of this model.
{ "id": "049b4b15-f219-4037-901e-cd95ac32fbc8", "title": "Healthcare Innovation Research Grant", "description": "Funding for innovative healthcare delivery solutions", "status": { "value": "open", "description": "Opportunity is actively accepting applications" }, "funding": { "totalAmountAvailable": { "amount": "1000000.00", "currency": "USD" }, "minAwardAmount": { "amount": "10000.00", "currency": "USD" }, "maxAwardAmount": { "amount": "50000.00", "currency": "USD" }, "minAwardCount": 5, "maxAwardCount": 20, "estimatedAwardCount": 10 }, "keyDates": { "postDate": { "name": "Opportunity posted", "eventType": "singleDate", "date": "2024-03-01", "description": "Opportunity is posted publicly" }, "closeDate": { "name": "Opportunity closed", "eventType": "singleDate", "date": "2024-04-30", "description": "Opportunity is closed to all applications" }, }, "acceptedApplicantTypes": ["individual", "organization"], "competitions": [ { "id": "123", "title": "Healthcare Innovation Competition" } ]}
The JSON Schema for this model.
$schema: https://json-schema.org/draft/2020-12/schema$id: OpportunityDetails.yamltype: objectproperties: competitions: type: array items: $ref: CompetitionBase.yaml description: The competitions associated with the opportunityallOf: - $ref: OpportunityBase.yamlunevaluatedProperties: not: {}description: A funding opportunity with additional details, like available competitions.
The TypeSpec code for this model.
/** A funding opportunity with additional details, like available competitions. */@Versioning.added(CommonGrants.Versions.v0_2)model OpportunityDetails extends OpportunityBase { /** The competitions associated with the opportunity */ competitions?: CompetitionBase[];}
OppStatus
Section titled “OppStatus”The status of an opportunity, such as whether it is accepting applications.
Property | Type | Required | Description |
---|---|---|---|
value | OppStatusOptions | Yes | The status value |
customValue | string | No | The display value for a custom status |
description | string | No | A human-readable description of the status |
Formats
Section titled “Formats”A JSON example of this model.
{ "value": "open", "description": "Opportunity is actively accepting applications"}
The JSON Schema for this model.
$schema: https://json-schema.org/draft/2020-12/schema$id: OppStatus.yamltype: objectproperties: value: $ref: OppStatusOptions.yaml description: The status of the opportunity, from a predefined set of options customValue: type: string description: A custom value for the status description: type: string description: A human-readable description of the statusrequired: - valueunevaluatedProperties: not: {}examples: - value: open description: The opportunity is currently accepting applications - value: custom customValue: archived description: The opportunity is archived and shouldn't appear in search resultsdescription: The status of the opportunity
The TypeSpec code for this model.
// ########################################
/** The status of the opportunity */@example(Examples.OppStatus.custom)@example(Examples.OppStatus.default)model OppStatus { /** The status of the opportunity, from a predefined set of options */ value: OppStatusOptions;
/** A custom value for the status */ customValue?: string;
/** A human-readable description of the status */
The Python code for this model.
class OppStatus(CommonGrantsBaseModel): """Represents the status of a funding opportunity."""
value: OppStatusOptions = Field( ..., description="The status value, from a predefined set of options", ) custom_value: Optional[str] = Field( default=None, alias="customValue", description="A custom status value", ) description: Optional[str] = Field( default=None, description="A human-readable description of the status", )
OppStatusOptions
Section titled “OppStatusOptions”The set of values accepted for opportunity status.
Value | Description |
---|---|
forecasted | Opportunity is anticipated, but not yet accepting applications |
open | Opportunity is actively accepting applications |
closed | Opportunity is no longer accepting applications |
custom | Custom opportunity status defined within the record |
Formats
Section titled “Formats”A JSON example of this model.
"open"
The JSON Schema for this model.
$schema: https://json-schema.org/draft/2020-12/schema$id: OppStatusOptions.yamltype: stringenum: - forecasted - open - closed - customdescription: |- The set of values accepted for opportunity status: - `forecasted`: The opportunity is forecasted and not yet open for applications - `open`: The opportunity is open for applications - `closed`: The opportunity is no longer accepting applications - `custom`: A custom status
The TypeSpec code for this model.
* - `closed`: The opportunity is no longer accepting applications * - `custom`: A custom status */enum OppStatusOptions { forecasted, open, closed,
The Python code for this model.
class OppStatusOptions(StrEnum): """The status of the opportunity."""
FORECASTED = "forecasted" OPEN = "open" CUSTOM = "custom" CLOSED = "closed"
def __lt__(self, other): """Define the order of status transitions.""" order = { self.FORECASTED: 0, self.OPEN: 1, self.CUSTOM: 2, self.CLOSED: 3, } return order[self] < order[other]
OppFunding
Section titled “OppFunding”Details about the funding available for an opportunity.
Property | Type | Required | Description |
---|---|---|---|
totalAmountAvailable | Money | No | Total amount of funding available |
minAwardAmount | Money | No | Minimum amount of funding granted per award |
maxAwardAmount | Money | No | Maximum amount of funding granted per award |
minAwardCount | integer | No | Minimum number of awards granted |
maxAwardCount | integer | No | Maximum number of awards granted |
estimatedAwardCount | integer | No | Estimated number of awards that will be granted |
Formats
Section titled “Formats”A JSON example of this model.
{ "totalAmountAvailable": { "amount": "1000000.00", "currency": "USD" }, "minAwardAmount": { "amount": "10000.00", "currency": "USD" }, "maxAwardAmount": { "amount": "50000.00", "currency": "USD" }, "minAwardCount": 5, "maxAwardCount": 20, "estimatedAwardCount": 10}
The JSON Schema for this model.
$schema: https://json-schema.org/draft/2020-12/schema$id: OppFunding.yamltype: objectproperties: details: type: string description: Details about the funding available for this opportunity that don't fit other fields totalAmountAvailable: $ref: Money.yaml description: Total amount of funding available for this opportunity minAwardAmount: $ref: Money.yaml description: Minimum amount of funding granted per award maxAwardAmount: $ref: Money.yaml description: Maximum amount of funding granted per award minAwardCount: type: integer description: Minimum number of awards granted maxAwardCount: type: integer description: Maximum number of awards granted estimatedAwardCount: type: integer description: Estimated number of awards that will be grantedunevaluatedProperties: not: {}examples: - totalAmountAvailable: amount: "1000000.00" currency: USD minAwardAmount: amount: "10000.00" currency: USD maxAwardAmount: amount: "50000.00" currency: USD minAwardCount: 5 maxAwardCount: 20 estimatedAwardCount: 10 - details: This opportunity has a total funding limit of $1,000,000 but no specific award range totalAmountAvailable: amount: "1000000.00" currency: USD estimatedAwardCount: 10 - details: We'll be awarding between $10,000 and $50,000 per recipient minAwardAmount: amount: "10000.00" currency: USD maxAwardAmount: amount: "50000.00" currency: USD minAwardCount: 5 maxAwardCount: 20description: Details about the funding available for this opportunity
The TypeSpec code for this model.
/** Details about the funding available for this opportunity */@example( Examples.Funding.awardRange, #{ title: "Award range but no total limit" })@example( Examples.Funding.onlyLimit, #{ title: "Total funding limit but no award range" })@example(Examples.Funding.allFields, #{ title: "All fields defined" })model OppFunding { /** Details about the funding available for this opportunity that don't fit other fields */ details?: string;
/** Total amount of funding available for this opportunity */ totalAmountAvailable?: Money;
/** Minimum amount of funding granted per award */ minAwardAmount?: Money;
/** Maximum amount of funding granted per award */ maxAwardAmount?: Money;
/** Minimum number of awards granted */ minAwardCount?: integer;
/** Maximum number of awards granted */ maxAwardCount?: integer;
The Python code for this model.
class OppFunding(CommonGrantsBaseModel): """Details about the funding available for an opportunity."""
details: Optional[str] = Field( default=None, description="Details about the funding available for this opportunity that don't fit other fields", ) total_amount_available: Optional[Money] = Field( default=None, alias="totalAmountAvailable", description="Total amount of funding available for this opportunity", ) min_award_amount: Optional[Money] = Field( default=None, alias="minAwardAmount", description="Minimum amount of funding granted per award", ) max_award_amount: Optional[Money] = Field( default=None, alias="maxAwardAmount", description="Maximum amount of funding granted per award", ) min_award_count: Optional[int] = Field( default=None, alias="minAwardCount", description="Minimum number of awards granted", ) max_award_count: Optional[int] = Field( default=None, alias="maxAwardCount", description="Maximum number of awards granted", ) estimated_award_count: Optional[int] = Field( default=None, alias="estimatedAwardCount", description="Estimated number of awards that will be granted", )
OppTimeline
Section titled “OppTimeline”Key dates in the opportunity’s timeline, such as when the application opens and closes.
Property | Type | Required | Description |
---|---|---|---|
postDate | Event | No | The date (and time) at which the opportunity is posted |
closeDate | Event | No | The date (and time) at which the opportunity closes |
otherDates | Record<Event> | No | An optional map of other key dates in the opportunity timeline |
Formats
Section titled “Formats”A JSON example of this model.
{ "postDate": { "name": "Opportunity posted", "eventType": "singleDate", "date": "2024-03-01", "description": "Applications begin being accepted" }, "closeDate": { "name": "Opportunity closed", "eventType": "singleDate", "date": "2024-04-30", "time": "17:00:00", "description": "Final deadline for all submissions" }, "otherDates": { "applicationPeriod": { "name": "Application period", "eventType": "dateRange", "startDate": "2024-03-01", "endDate": "2024-04-30", "description": "Applications are accepted during this period" }, "infoSessions": { "name": "Information session", "eventType": "other", "details": "Every Tuesday at 10:00 AM in March", "description": "Information session about the opportunity" }, "anticipatedAward": { "name": "Anticipated award date", "eventType": "singleDate", "date": "2025-03-15", "description": "When we expect to announce awards for this opportunity." } }}
The JSON Schema for this model.
$schema: https://json-schema.org/draft/2020-12/schema$id: OppTimeline.yamltype: objectproperties: postDate: $ref: Event.yaml description: The date (and time) at which the opportunity is posted closeDate: $ref: Event.yaml description: The date (and time) at which the opportunity closes otherDates: $ref: "#/$defs/RecordEvent" description: |- An optional map of other key dates or events in the opportunity timeline
Examples might include a deadline for questions, anticipated award date, etc.unevaluatedProperties: not: {}examples: - postDate: name: Application posted date eventType: singleDate date: 2024-01-15 description: Opportunity is posted publicly closeDate: name: Opportunity close date eventType: singleDate date: 2024-12-31 time: 17:00:00 description: Opportunity closes for all applications otherDates: anticipatedAward: name: Anticipated award date eventType: singleDate date: 2025-03-15 description: When we expect to announce awards for this opportunity. applicationPeriod: name: Application period eventType: dateRange startDate: 2024-01-01 endDate: 2024-01-31 endTime: 17:00:00 description: Primary application period for the grant opportunity performancePeriod: name: Period of Performance eventType: dateRange startDate: 2024-01-01 endDate: 2024-12-31 description: Period of performance for the grant infoSessions: name: Info sessions eventType: other details: Every other Tuesday description: Info sessions for the opportunitydescription: Key dates and events in the opportunity's timeline, such as when the opportunity is posted and closes$defs: RecordEvent: type: object properties: {} unevaluatedProperties: $ref: Event.yaml
The TypeSpec code for this model.
/** Key dates and events in the opportunity's timeline, such as when the opportunity is posted and closes */@example(Examples.Timeline.opportunity)model OppTimeline { /** The date (and time) at which the opportunity is posted */ postDate?: Event;
/** The date (and time) at which the opportunity closes */ closeDate?: Event;
/** An optional map of other key dates or events in the opportunity timeline * * Examples might include a deadline for questions, anticipated award date, etc. */ otherDates?: Record<Event>;}
The Python code for this model.
class OppTimeline(CommonGrantsBaseModel): """Key dates and events in the lifecycle of an opportunity."""
post_date: Optional[Event] = Field( default=None, alias="postDate", description="The date (and time) at which the opportunity is posted", ) close_date: Optional[Event] = Field( default=None, alias="closeDate", description="The date (and time) at which the opportunity closes", ) other_dates: Optional[dict[str, Event]] = Field( default=None, alias="otherDates", description="An optional map of other key dates or events in the opportunity timeline", )