Making your first request
Put the key in an Authorization: Bearer header and ask for the opportunity
list. There is no other credential to manage. No client ID, no token exchange,
no refresh step.
curl https://app.prokure.ca/api/v1/opportunities \ -H "Authorization: Bearer $PROKURE_API_KEY"That request needs the opportunities:read scope. The pk_live_ prefix is part
of the credential, so send the whole string exactly as the portal displayed it.
What comes back
Section titled “What comes back”A page of opportunities plus a cursor:
{ "items": [], "nextCursor": null }Each item carries the opportunity id, the underlying solicitation rfp_id,
the title and issuing body, the deadline, the match score, and the status.
nextCursor is an opaque string. Pass it straight back as the cursor query
parameter for the next page, and stop when it comes back null.
If it fails
Section titled “If it fails”A 401 means the credential itself is wrong: the header never arrived, or the
key is unknown, revoked, or expired. A 403 with insufficient_scope means the
key is valid but was minted without the scope this route needs, and the message
names the missing scope. Neither is worth retrying.
Related
Section titled “Related”- Getting started: the same request in TypeScript and Python, with the full response walked through.
- List opportunities: the generated reference.
- Fixing 401 and 403 errors.