GraphQL API
One endpoint, cacheable, shaped for aggregation clients. Every RFP Hub operator exposes the same schema so a single aggregator can consume multiple instances.
Endpoint
A single GraphQL endpoint backed by a Powerhouse switchboard. The reference deployment runs at:
http://localhost:4001/graphql
Override with NEXT_PUBLIC_SWITCHBOARD_URL. Any operator running their own instance can substitute their URL.
Quick start
curl -X POST $NEXT_PUBLIC_SWITCHBOARD_URL \
-H "Content-Type: application/json" \
-d '{"query": "{ rfps(filter: { status: OPEN }) { items { id title funder deadline } total } }"}'Schema
type Query {
rfps(filter: RfpFilter, pagination: Pagination): RfpPage!
rfp(id: OID!): Rfp
rfpBySlug(slug: String!): Rfp
publishers: [Publisher!]!
stats: HubStats!
}
input RfpFilter {
funder: String
category: String
status: RfpStatus # OPEN | CLOSED | UPCOMING | CANCELLED
ecosystem: String
deadlineBefore: DateTime
deadlineAfter: DateTime
search: String
}
type Rfp {
id: OID!
slug: String!
title: String!
summary: String!
body: String
funder: String!
funderUrl: URL
categories: [String!]!
status: RfpStatus!
deadline: DateTime
fundingAmount: String
fundingCurrency: String
ecosystem: String
sourceUrl: URL
provenance: Provenance!
createdAt: DateTime!
updatedAt: DateTime!
}
type Provenance {
submitter: EthereumAddress
submittedAt: DateTime!
verificationStatus: VerificationStatus! # UNVERIFIED | VERIFIED | DISPUTED
sourceHash: String!
}DAOIP-5 alignment
The Rfp type aligns with DAOstar's DAOIP-5 Grants Metadata Standard. A sourceHash derived from keccak256(funder + title + deadline) enables cross-operator deduplication.
Submitting RFPs
Read access is unauthenticated. Write access is signed — submissions dispatch an addRfp action to the reactor, authenticated via a Renown bearer token. Anyone can submit; verification is a separate processor step.