Public · unauthenticated

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.