ServiceChannel Rfps API
The Rfps API from ServiceChannel — 6 operation(s) for rfps.
The Rfps API from ServiceChannel — 6 operation(s) for rfps.
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/servicechannel-rfps-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:
version: bearer.v1
title: Fixxbook.Bearer.Api.V1 AfterHours Rfps API
isOdataApi: false
relativePath: ''
discoveryPath: docs/bearer.v1
_isAuthorizedAccess: true
servers:
- url: https://sb2fixxbook.servicechannel.com:443/api
security:
- oauth2: []
tags:
- name: Rfps
paths:
/rfps:
post:
tags:
- Rfps
summary: Create an RFP
description: "Creates a request for proposal (RFP). Returns a unique RFP ID for a successful request.\n <br />***Note:*** Subscribers can create RFPs [using the API](/guides/proposals/create-and-manage-RFPs/#create-an-rfp) or via [Service Automation](https://servicechannel.atlassian.net/wiki/spaces/SCU/pages/560300086/Creating+an+RFP).\n <br />**Example Request**\n \n POST /rfps\n {\n \"Number\": \"\",\n \"PONumber\": \"\",\n \"WONumber\": \"\",\n \"TradeId\": 90480,\n \"Description\": \"New doors for the office\",\n \"Date\": \"\",\n \"DueHrs\": 48,\n \"DueDate\": \"\",\n \"Location\": {\n \"Id\": 2006071467,\n \"StoreId\": \"\"\n },\n \"ProviderId\": 2000090505,\n \"ResponseDate\": \"\",\n \"ProposalNotificationEmail\": \"LFAlways1776@gmail.com\",\n \"ProviderEmail\": \"\",\n \"ProposalTemplateId\": 0,\n \"WorkOrderId\": 0,\n \"ProjectId\": 0\n }"
operationId: POSTv3_rfps
responses:
'201':
description: The RFP is created, and a unique RFP ID is returned in the response.
'400':
description: "The request is not accepted due to bad syntax, missing parameters, insufficient data, etc.\n <br/>Error codes:\n 503 — Request is empty or null\n 503 — Provider is not valid\n 503 — Empty E-Mail address ('ProposalNotificationEmail')\n 503 — TradeId is not valid\n 503 — Empty Description\n 503 — Empty Location or Store ID\n 503 — Invalid location Id for current user\n 503 — Active contract for current trade, provider, locationId not found\n 503 — Empty Provider E-Mail address ('ProviderEmail')"
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.ErrorResponse'
text/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.ErrorResponse'
'401':
description: "The request is not authorized.\n <br/>Error codes:\n 504 — API call rejected by security permissions\n 504 — User does not have Location or Trade access to perform this operation"
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.ErrorResponse'
text/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.ErrorResponse'
'500':
description: The server was unable to complete the request due to an internal error.
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.ErrorResponse'
text/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.ErrorResponse'
deprecated: false
x-access: Subscribers
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.Rfp.CreateRfpRequest'
text/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.Rfp.CreateRfpRequest'
description: The request to create an RFP.
required: true
/rfps/{rfpId}/assign:
put:
tags:
- Rfps
summary: Assign an RFP to another provider
description: "Assigns the RFP to the specified provider. Returns a unique RFP ID for a successful request.\n <br />***Note:*** The provider you want to assign the RFP to should have access to the location and trade for which the RFP was created.\n <br />Learn more about [assigning an RFP to another provider](/guides/proposals/create-and-manage-RFPs/#assign-an-rfp-to-another-provider).\n <br />**Example Request**\n \n PUT /rfps/{rfpId}/assign\n {\n \"ProviderId\": 2000090505,\n \"ProviderEmail\": \"\"\n }"
operationId: PUTv3_rfps_{rfpId}_assign
parameters:
- name: rfpId
in: path
description: The unique numeric identifier of the RFP to assign to the specified provider.
required: true
schema:
type: integer
format: int32
responses:
'200':
description: The RFP is assigned to the specified provider, and a unique RFP ID is returned in the response.
'400':
description: "The request is not accepted due to bad syntax, missing parameters, insufficient data, etc.\n <br/>Error codes:\n 502 — RFP not found\n 503 — Request is empty or null\n 503 — Provider is not valid\n 503 — Empty Provider E-Mail address ('ProviderEmail')"
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.ErrorResponse'
text/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.ErrorResponse'
'401':
description: "The request is not authorized.\n <br/>Error codes:\n 504 — API call rejected by security permissions"
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.ErrorResponse'
text/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.ErrorResponse'
'500':
description: The server was unable to complete the request due to an internal error.
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.ErrorResponse'
text/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.ErrorResponse'
deprecated: false
x-access: Subscribers
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.Rfp.AssignRfpRequest'
text/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.Rfp.AssignRfpRequest'
description: The request to assign the RFP to another provider.
required: true
/rfps/{id}:
delete:
tags:
- Rfps
summary: Delete an RFP by ID
description: Permanently deletes the specified RFP by its ID. It cannot be undone. Find out more about [deleting RFPs via the API](/guides/proposals/create-and-manage-RFPs/#delete-an-rfp).
operationId: DELETEv3_rfps_{id}
parameters:
- name: id
in: path
description: The unique numeric identifier of the RFP to delete.
required: true
schema:
type: integer
format: int32
responses:
'204':
description: The RFP is deleted, and the response is intentionally blank.
'400':
description: "The request is not accepted due to bad syntax, missing parameters, insufficient data, etc.\n <br/>Error codes:\n 502 — RFP not found\n 503 — RFP can only be deleted, if none of the proposals are approved"
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.ErrorResponse'
text/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.ErrorResponse'
'401':
description: "The request is not authorized.\n <br/>Error codes:\n 504 — API call rejected by security permissions"
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.ErrorResponse'
text/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.ErrorResponse'
'404':
description: The requested resource does not exist on the server.
deprecated: false
x-access: Subscribers
/rfps/{number}/locations/{locationId}:
delete:
tags:
- Rfps
summary: Delete an RFP by the RFP number and location ID
description: "Permanently deletes the RFP by the specified RFP number and location ID. It cannot be undone.\n <br />***Note:*** The RFP number is not unique. If multiple RFPs with the same number were created for a location, all of them are deleted when you pass the request.\n <br />Learn more about [deleting RFPs via the API](/guides/proposals/create-and-manage-RFPs/#delete-an-rfp)."
operationId: DELETEv3_rfps_{number}_locations_{locationId}
parameters:
- name: number
in: path
description: The non-unique identifier of the RFP to delete.
required: true
schema:
type: string
- name: locationId
in: path
description: The unique numeric identifier of the location for which the RFP was created.
required: true
schema:
type: integer
format: int32
responses:
'204':
description: The RFP is deleted, and the response is intentionally blank.
'400':
description: "The request is not accepted due to bad syntax, missing parameters, insufficient data, etc.\n <br/>Error codes:\n 502 — RFP not found\n 503 — RFP can only be deleted, if none of the proposals are approved"
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.ErrorResponse'
text/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.ErrorResponse'
'401':
description: "The request is not authorized.\n <br/>Error codes:\n 504 — API call rejected by security permissions"
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.ErrorResponse'
text/json:
schema:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.ErrorResponse'
'404':
description: The requested resource does not exist on the server.
deprecated: false
x-access: Subscribers
/odata/rfps:
get:
tags:
- Rfps
summary: Retrieve Rfps
description: "Retrieve Rfps\n <br /> Dates without 'Dto' endings return UTC date format.\n <br /> Dates without 'Dto' endings are not recommended for using."
operationId: Rfps_GetRfps
parameters:
- name: $expand
in: query
description: Expand a navigation property.
required: false
schema:
type: string
- name: $select
in: query
description: Select a set of properties to return.
required: false
schema:
type: string
- name: $filter
in: query
description: Filter a collection of resources addressed by a request URL.
required: false
schema:
type: string
- name: $orderby
in: query
description: Order resources by the specified property in the response.
required: false
schema:
type: string
- name: $top
in: query
description: Return the specified number of items in the response.
required: false
schema:
type: integer
- name: $skip
in: query
description: Skip the specified number of items in the response.
required: false
schema:
type: integer
- name: $count
in: query
description: Include the count of the matching resources in the response.
required: false
schema:
type: boolean
responses:
'200':
description: Indicates that the request succeeded and that the requested information is in the response.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.Rfp.Rfp'
deprecated: false
x-access: Subscribers
/odata/rfps({rfpId}):
get:
tags:
- Rfps
summary: Retrieve Rfp
description: Retrieve Rfp
operationId: Rfps_GetRfp
parameters:
- name: rfpId
in: path
description: ''
required: true
schema:
type: integer
format: int32
- name: $expand
in: query
description: Expand a navigation property.
required: false
schema:
type: string
- name: $select
in: query
description: Select a set of properties to return.
required: false
schema:
type: string
- name: $filter
in: query
description: Filter a collection of resources addressed by a request URL.
required: false
schema:
type: string
- name: $orderby
in: query
description: Order resources by the specified property in the response.
required: false
schema:
type: string
- name: $top
in: query
description: Return the specified number of items in the response.
required: false
schema:
type: integer
- name: $skip
in: query
description: Skip the specified number of items in the response.
required: false
schema:
type: integer
- name: $count
in: query
description: Include the count of the matching resources in the response.
required: false
schema:
type: boolean
responses:
'200':
description: Indicates that the request succeeded and that the requested information is in the response.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.Rfp.Rfp'
deprecated: false
x-access: Subscribers
components:
schemas:
ServiceChannel.Services.Messaging.Workorders.WorkorderStatusDescriptor:
type: object
properties:
Primary:
description: Primary work order status value, you can pass status id or its name here. To get all subscriber's statuses see [Statuses] in Statuses section
type: string
Extended:
description: Extended status value
type: string
CanCreateInvoice:
description: True if invoice creation is allowed
default: false
type: boolean
ServiceChannel.Services.Messaging.ApprovalCodes.AdditionalApprovalCodeOption:
type: object
properties:
Id:
format: int32
type: integer
Value:
type: string
ServiceChannel.Services.Messaging.Invoices.InvoiceTaxesDetails:
description: Object containing the list of taxes. You can add taxes as a fixed amount or as a percentage.
type: object
properties:
LaborTaxPercent:
format: double
description: Amount of the labor tax in percentage (for countries other than USA and Canada).
type: number
MaterialTaxPercent:
format: double
description: Amount of the material tax in percentage (for countries other than USA and Canada).
type: number
TravelTaxPercent:
format: double
description: Amount of the travel tax in percentage (for countries other than USA and Canada).
type: number
FreightTaxPercent:
format: double
description: Amount of the freight tax in percentage (for countries other than USA and Canada).
type: number
OtherTaxPercent:
format: double
description: Amount of other taxes in percentage (for countries other than USA and Canada).
type: number
LaborTax:
format: double
description: Amount of the labor tax.
type: number
MaterialTax:
format: double
description: Amount of the material tax.
type: number
TravelTax:
format: double
description: Amount of the travel tax.
type: number
FreightTax:
format: double
description: Amount of the freight tax.
type: number
OtherTax:
format: double
description: Amount of other taxes.
type: number
ServiceChannel.Services.Messaging.Invoices.InvoiceCategoryMessaging:
type: object
properties:
Id:
format: int32
type: integer
Name:
type: string
ServiceChannel.Services.Messaging.Invoices.StatusHistoryShort:
type: object
properties:
CreatedBy:
type: string
CreatedById:
format: int32
type: integer
Status:
type: string
InvId:
format: int32
type: integer
ActionDate:
type: string
ServiceChannel.Api.Model.Proposals.MlpRuleAction:
type: object
properties:
Name:
type: string
Limit:
format: double
type: number
ForwardTo:
format: int32
type: integer
ForwardToLevelName:
type: string
EndStatus:
type: string
AutoEscalateInDays:
format: int32
type: integer
EntryLevel:
default: false
type: boolean
CodeChange:
default: false
type: boolean
CategoryChange:
default: false
type: boolean
LevelId:
format: int32
type: integer
LevelName:
type: string
RuleNumber:
format: int32
type: integer
RuleOrder:
format: int32
type: integer
Id:
format: int32
type: integer
RuleSetId:
format: int32
type: integer
Override:
default: false
type: boolean
SkipOverLimit:
default: false
type: boolean
ActionNotification:
default: false
type: boolean
LocationId:
format: int32
type: integer
UserId:
format: int32
type: integer
ServiceChannel.Services.Messaging.Assets.WarrantyExpiration:
description: Object containing warranty expiration details.
type: object
properties:
Type:
description: 'Warranty expiration calculation type. **Possible values**: 0 - the expiration date is calculated starting from the asset purchase data; 1 - the expiration date is calculated starting from the asset installation date.'
enum:
- FromPurchaseDate
- FromInstallDate
type: string
Period:
format: int32
description: Warranty period in months.
type: integer
System.Object:
type: object
properties: {}
ServiceChannel.Services.Messaging.CountDescriptor:
type: object
properties:
Total:
format: int32
type: integer
Own:
format: int32
type: integer
ServiceChannel.Services.Messaging.Invoices.InvoiceApprovalCode:
type: object
properties:
Id:
format: int32
type: integer
InvoiceId:
format: int32
type: integer
InvoiceChargeId:
format: int32
type: integer
ApprovalCodeType:
enum:
- Labor
- Travel
- Material
- Freight
- Other
- Tax
- Tax2
- LineItem
- FreightGenerated
type: string
ApprovalCode:
type: string
AdditionalApprovalCode:
type: string
ParentId:
format: int32
type: integer
InternalId:
format: int32
type: integer
InternalParentId:
format: int32
type: integer
IsDefault:
default: false
type: boolean
ServiceChannel.Services.Messaging.Workorders.AssigneeUser:
type: object
properties:
UserId:
format: int32
type: integer
UserName:
type: string
ServiceChannel.Services.Messaging.Invoices.Tax2Details:
description: Information on the additional tax. Only invoices for Canadian locations can have Tax2Details.
type: object
properties:
Tax2Amount:
format: double
description: Amount of the additional tax.
type: number
Tax2Name:
description: Name of the additional tax, for example, *VAT*, *HST*, *PST*, or *QST*.
type: string
ServiceChannel.Services.Messaging.Users.User:
description: User details object.
type: object
properties:
Id:
format: int32
description: Unique user identifier.
type: integer
SubscriberId:
format: int32
description: Unique subscriber ID.
type: integer
UserName:
description: Username of the user.<br /> • For subscriber users, the username appears as **User Id** on the "General Info" tab of the user profile page.<br /> • For provider users, the username is listed as **UserID** under "Access" on the "General" tab of the user profile page.
pattern: ^$|(^\S+).(\S).(\S)$
type: string
FullName:
description: Full name of the user.<br /> • For subscriber users, the full name appears as **User Name** on the "General Info" tab of the user profile page.<br /> • For provider users, you can see their first and last name under "Basic" on the "General" tab of the user profile page.
type: string
Email:
description: User’s email address.
type: string
PsmEmail:
description: Email address through which a user can reset their password.
type: string
Disabled:
description: Defines if a user is deactivated.
default: false
type: boolean
IsLocked:
description: Defines if a user is locked.
default: false
type: boolean
Roles:
description: Secondary roles assigned to a subscriber user that determine their permissions and level of access to various Service Automation modules.
type: array
items:
type: string
Permissions:
description: Permissions assigned to a subscriber user that determine whether they have full or read-only access to various Service Automation modules.
type: array
items:
type: string
UserType:
description: Subscriber user type defining their level of access to ServiceChannel:<br /> • `Corporate` — a user can work in Service Automation.<br /> • `Dashboard` — a user can only access the dashboard assigned to them.<br />`0` is returned for provider users.
enum:
- Corporate
- Dashboard
- ServiceChannel
type: string
Dashboard:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.Users.DashboardInfo'
description: Dashboard a subscriber user has access to.
Access:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.Users.AccessOptions'
description: List of locations, districts, regions, and trades a subscriber user has access to.
Limits:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.Users.LimitOptions'
description: NTE, proposal, and invoice limits set for a subscriber user.
FeedRole:
type: string
MliUserInfo:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.Users.MliUserInfo'
description: ''
MlpUserInfo:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.Users.MlpUserInfo'
ServiceChannel.Services.Messaging.Invoices.InvoiceApprovalCodeChild:
type: object
properties:
Amount:
format: double
type: number
Id:
format: int32
type: integer
InvoiceId:
format: int32
type: integer
InvoiceChargeId:
format: int32
type: integer
ApprovalCodeType:
enum:
- Labor
- Travel
- Material
- Freight
- Other
- Tax
- Tax2
- LineItem
- FreightGenerated
type: string
ApprovalCode:
type: string
AdditionalApprovalCode:
type: string
ParentId:
format: int32
type: integer
InternalId:
format: int32
type: integer
InternalParentId:
format: int32
type: integer
IsDefault:
default: false
type: boolean
ServiceChannel.Services.Messaging.Users.LimitOptions:
description: Object for NTE, proposal, and invoice limits set for a subscriber user.
type: object
properties:
NteLimit:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.Users.Limit'
description: Limit for the NTE amount that a user can not exceed upon editing work orders. If a user who has permission to edit work orders tries to enter the NTE amount above the set limit, an error message will appear.
ProposalLimit:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.Users.Limit'
description: Limit for the proposal amount above which a user can not approve proposals — for users with the corresponding permission. The user can put on hold or reject proposals above their limit.
InvoiceLimit:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.Users.Limit'
description: Limit for the invoice amount above which a user can not process invoices by changing their status. The user can view invoices above their limit if they have the corresponding permission.
ServiceChannel.Services.Messaging.Currencies.Currency:
type: object
properties:
Id:
format: int32
type: integer
AlphabeticalCode:
type: string
DecimalCount:
format: int32
type: integer
Entity:
type: string
CurrencyName:
type: string
NumericCode:
type: string
Rate:
format: double
type: number
ServiceChannel.Services.Messaging.Notes.NotesDescriptor:
type: object
properties:
WorkOrderId:
format: int32
type: integer
Last:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.Notes.NoteInfo'
Count:
$ref: '#/components/schemas/ServiceChannel.Services.Messaging.CountDescriptor'
ServiceChannel.Services.Messaging.Attachments.Attachment:
description: Object containing information about an attachment.
type: object
properties:
Id:
format: int32
description: Unique numeric identifier of the attachment.
type: integer
Description:
description: Optional text that a user added when uploading the attachment. The maximum character count is 200.
type: string
Name:
description: Attachment name.
type: string
TimeStamp:
format: date-time
description: Date and time when the attachment was uploaded. The format is `YYYY-MM-DDThh:mm:ss.sss±hh:mm`, where `±hh:mm` represents the time zone offset from UTC.
type: string
Uri:
description: Link address to the attachment in the ServiceChannel system.
type: string
NoteId:
format: int64
description: Unique numeric identifier of the note to which a user added the attachment.
type: integer
Visibility:
format: int32
description: "Visibility status of the attachment. Defines which parties can view the attachment. The *PrivateProviderNotesAndAttachments* feature should be enabled. For subscribers who are using Universal Connector, the *PrivateClientNotesAndAttachments* feature should be enabled.\n <br />Possible values:\n • `0`: No restrictions on visibility. Visible to everyone.\n • `1`: Not visible to the client. The subscriber deselected the “Visible to Client” checkmark when uploading an attachment or adding a note with an attachment. \n • `2`: Not visible to the provider. The subscriber deselected the “Visible to Provider” checkmark when uploading an attachment or adding a note with an attachment. \n • `3`: Visible to the subscriber only. The subscriber deselected the “Visible to Client” and “Visible to Provider” checkmarks when uploading an attachment or adding a note with an attachment."
type: integer
IsInvoiceDigitalCopy:
description: "Defines if the attachment is a digital copy of the provider’s invoice. According to subscriber configurations, some providers should attach digital copies of invoices.\n Possible values: \n • `true`: The attachment is an invoice digital copy. \n • `false`: The attachment is not an invoice digital copy. \n <br />***Note:*** Subscribers can set the requirement of a digital invoice copy from providers when the *InvoiceRequireDigitalCopy* feature is turned on."
default: false
type: boolean
UploadBy:
description: User who uploaded the attachment.
type: string
ServiceChannel.Api.Model.Proposals.MlpRecommendation:
type: object
properties:
Id:
format: int32
type: integer
ProposalId:
format: int32
type: integer
UserId:
format: int32
type: integer
Status:
type: string
WoType:
enum:
- Origin
- New
- Existing
type: string
OriginalTrackingNumber:
format: int32
type: integer
SelectedTrackingNumber:
format: int32
type: integer
GeneratedTrackingNumber:
format: int32
type: integer
PoNumber:
type: string
Category:
type: string
CategoryId:
format: int32
type: integer
ApprovalCode:
type: string
Priority:
type: string
PriorityId:
format: int32
type: integer
RejectCodeId:
format: int32
type: integer
ApprovalReason:
type: string
EmailsToNotify:
type: string
Applied:
default: false
type: boolean
AttachmentsToWO:
defau
# --- truncated at 32 KB (169 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/servicechannel/refs/heads/main/openapi/servicechannel-rfps-api-openapi.yml