Govly Quote Submissions API
Inspect quote submission requirements, submit quotes, and poll submission status.
Inspect quote submission requirements, submit quotes, and poll submission status.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/govly-quote-submissions-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Govly Tools API (Alpha) Awards Quote Submissions API
version: 1.0.0-alpha
description: 'ALPHA / UNSTABLE: This API is still in active development. Endpoint behavior, request fields, response fields, error codes, and operation names may change before the Tools API is declared stable.
REST-callable tool surface for agent and automation workflows. Agents are the primary consumer, but integrations can be built on this API. Responses are JSON for typed clients; MCP tools may render action results into text-oriented formats separately.
'
servers:
- url: https://app.govly.com
security:
- bearerApiKey: []
- headerApiKey: []
tags:
- name: Quote Submissions
description: Inspect quote submission requirements, submit quotes, and poll submission status.
paths:
/api/tools/v1/quote/submissions/requirements:
get:
tags:
- Quote Submissions
operationId: get_quote_submission_requirements
summary: Check quote submission requirements
description: 'Returns portal-specific quote submission requirements and blocking reasons for the authenticated actor and workspace.
'
parameters:
- name: workspaceId
in: query
required: true
schema:
type: string
responses:
'200':
description: Quote submission requirements
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteSubmissionRequirementsEnvelope'
'401':
$ref: '#/components/responses/Error'
'403':
$ref: '#/components/responses/Error'
'404':
$ref: '#/components/responses/Error'
'422':
$ref: '#/components/responses/Error'
/api/tools/v1/quote/submissions:
get:
tags:
- Quote Submissions
operationId: list_quote_submissions
summary: List quote submissions for a workspace
parameters:
- name: workspaceId
in: query
required: true
schema:
type: string
responses:
'200':
description: Quote submissions
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteSubmissionListEnvelope'
'401':
$ref: '#/components/responses/Error'
'403':
$ref: '#/components/responses/Error'
'404':
$ref: '#/components/responses/Error'
'422':
$ref: '#/components/responses/Error'
post:
tags:
- Quote Submissions
operationId: create_quote_submission
summary: Submit a quote
description: 'Submit a quote to the portal for an opportunity workspace. Upload the quote file to the workspace attachments endpoint first, then pass the returned workspaceAttachmentId here. The response returns a submission ID that can be polled with show_quote_submission.
'
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: false
required:
- workspaceId
- workspaceAttachmentId
- quoteTotal
properties:
workspaceId:
type: string
workspaceAttachmentId:
type: string
quoteTotal:
type: string
description: Decimal quote total. Must be greater than 0.
comment:
type: string
description: Optional portal submission comment.
responses:
'201':
description: Created quote submission
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteSubmissionEnvelope'
'401':
$ref: '#/components/responses/Error'
'403':
$ref: '#/components/responses/Error'
'404':
$ref: '#/components/responses/Error'
'422':
$ref: '#/components/responses/Error'
/api/tools/v1/quote/submissions/{id}:
get:
tags:
- Quote Submissions
operationId: show_quote_submission
summary: Show quote submission status
description: 'Poll this endpoint after create_quote_submission until meta.terminal is true. Completed submissions include confirmation details when the portal returns them; failed submissions include failureReason when available.
'
parameters:
- $ref: '#/components/parameters/id'
responses:
'200':
description: Quote submission status
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteSubmissionEnvelope'
'401':
$ref: '#/components/responses/Error'
'403':
$ref: '#/components/responses/Error'
'404':
$ref: '#/components/responses/Error'
'422':
$ref: '#/components/responses/Error'
components:
schemas:
QuoteSubmissionFileRules:
type: object
required:
- maxBytes
- allowedExtensions
properties:
maxBytes:
type: integer
allowedExtensions:
type: array
items:
type: string
QuoteSubmissionStatusMeta:
type: object
required:
- terminal
properties:
terminal:
type: boolean
description: True when the submission no longer needs polling.
nextPollAfterSeconds:
type: integer
description: Suggested delay before polling again. Omitted for terminal submissions.
retryable:
type: boolean
description: Present for failed submissions when creating a new submission is reasonable.
ErrorEnvelope:
type: object
required:
- errors
properties:
errors:
type: array
items:
type: object
required:
- status
- code
- title
- detail
properties:
status:
type: string
code:
type: string
title:
type: string
detail:
type: string
source:
type: object
properties:
pointer:
type: string
CountMeta:
type: object
required:
- count
properties:
count:
type: integer
QuoteSubmissionRequirementsEnvelope:
type: object
required:
- data
properties:
data:
$ref: '#/components/schemas/QuoteSubmissionRequirements'
QuoteSubmissionRequirements:
type: object
required:
- eligible
- requiredFields
- optionalFields
- blockingReasons
properties:
workspaceId:
type: string
opportunityId:
type: string
portal:
type: string
enum:
- chess
eligible:
type: boolean
description: True when the authenticated actor can submit with the returned requirements.
requiredFields:
type: array
items:
$ref: '#/components/schemas/QuoteSubmissionField'
optionalFields:
type: array
items:
$ref: '#/components/schemas/QuoteSubmissionField'
fileRules:
$ref: '#/components/schemas/QuoteSubmissionFileRules'
blockingReasons:
type: array
items:
$ref: '#/components/schemas/QuoteSubmissionBlockingReason'
QuoteSubmissionBlockingReason:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- quote_submission_not_available_for_portal
- missing_or_inactive_portal_account
- workspace_not_linked_to_opportunity
message:
type: string
AttachmentFile:
type: object
description: Presigned download metadata. Omitted when the attachment is redacted or URLs are excluded.
required:
- url
- expiresAt
properties:
url:
type: string
format: uri
expiresAt:
type: string
format: date-time
QuoteSubmissionField:
type: object
required:
- name
- type
properties:
name:
type: string
type:
type: string
description:
type: string
QuoteSubmissionAttachment:
type: object
required:
- id
- filename
properties:
id:
type: string
filename:
type: string
contentType:
type: string
byteSize:
type: integer
file:
$ref: '#/components/schemas/AttachmentFile'
QuoteSubmission:
type: object
required:
- id
- status
- portal
- workspaceId
- opportunityId
- quoteTotal
- createdAt
properties:
id:
type: string
status:
type: string
enum:
- pending
- running
- completed
- failed
- cancelled
portal:
type: string
enum:
- chess
workspaceId:
type: string
opportunityId:
type: string
quoteTotal:
type: string
comment:
type: string
confirmationNumber:
type: string
failureReason:
type: string
submittedAt:
type: string
format: date-time
confirmedAt:
type: string
format: date-time
createdAt:
type: string
format: date-time
file:
$ref: '#/components/schemas/QuoteSubmissionAttachment'
evidence:
$ref: '#/components/schemas/QuoteSubmissionAttachment'
QuoteSubmissionListEnvelope:
type: object
required:
- data
- meta
properties:
data:
type: array
items:
$ref: '#/components/schemas/QuoteSubmission'
meta:
$ref: '#/components/schemas/CountMeta'
QuoteSubmissionEnvelope:
type: object
required:
- data
- meta
properties:
data:
$ref: '#/components/schemas/QuoteSubmission'
meta:
$ref: '#/components/schemas/QuoteSubmissionStatusMeta'
responses:
Error:
description: Error response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
parameters:
id:
name: id
in: path
required: true
schema:
type: string
securitySchemes:
bearerApiKey:
type: http
scheme: bearer
bearerFormat: API key
headerApiKey:
type: apiKey
in: header
name: X-API-KEY