ServiceChannel Rfps API
The Rfps API from ServiceChannel — 6 operation(s) for rfps.
The Rfps API from ServiceChannel — 6 operation(s) for rfps.
swagger: '2.0'
info:
version: bearer.v1
title: Fixxbook.Bearer.Api.V1 AfterHours Rfps API
isOdataApi: false
relativePath: ''
discoveryPath: docs/bearer.v1
_isAuthorizedAccess: true
host: sb2fixxbook.servicechannel.com:443
basePath: /api
schemes:
- https
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.\r\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).\r\n <br />**Example Request**\r\n \r\n POST /rfps\r\n {\r\n \"Number\": \"\",\r\n \"PONumber\": \"\",\r\n \"WONumber\": \"\",\r\n \"TradeId\": 90480,\r\n \"Description\": \"New doors for the office\",\r\n \"Date\": \"\",\r\n \"DueHrs\": 48,\r\n \"DueDate\": \"\",\r\n \"Location\": {\r\n \"Id\": 2006071467,\r\n \"StoreId\": \"\"\r\n },\r\n \"ProviderId\": 2000090505,\r\n \"ResponseDate\": \"\",\r\n \"ProposalNotificationEmail\": \"LFAlways1776@gmail.com\",\r\n \"ProviderEmail\": \"\",\r\n \"ProposalTemplateId\": 0,\r\n \"WorkOrderId\": 0,\r\n \"ProjectId\": 0\r\n }"
operationId: POSTv3_rfps
consumes:
- application/json
- text/json
produces:
- application/json
- text/json
parameters:
- name: request
in: body
description: The request to create an RFP.
required: true
schema:
$ref: '#/definitions/ServiceChannel.Services.Messaging.Rfp.CreateRfpRequest'
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.\r\n <br/>Error codes:\r\n 503 — Request is empty or null\r\n 503 — Provider is not valid\r\n 503 — Empty E-Mail address ('ProposalNotificationEmail')\r\n 503 — TradeId is not valid\r\n 503 — Empty Description\r\n 503 — Empty Location or Store ID\r\n 503 — Invalid location Id for current user\r\n 503 — Active contract for current trade, provider, locationId not found\r\n 503 — Empty Provider E-Mail address ('ProviderEmail')"
schema:
$ref: '#/definitions/ServiceChannel.Services.Messaging.ErrorResponse'
'401':
description: "The request is not authorized.\r\n <br/>Error codes:\r\n 504 — API call rejected by security permissions\r\n 504 — User does not have Location or Trade access to perform this operation"
schema:
$ref: '#/definitions/ServiceChannel.Services.Messaging.ErrorResponse'
'500':
description: The server was unable to complete the request due to an internal error.
schema:
$ref: '#/definitions/ServiceChannel.Services.Messaging.ErrorResponse'
deprecated: false
x-access: Subscribers
/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.\r\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.\r\n <br />Learn more about [assigning an RFP to another provider](/guides/proposals/create-and-manage-RFPs/#assign-an-rfp-to-another-provider).\r\n <br />**Example Request**\r\n \r\n PUT /rfps/{rfpId}/assign\r\n {\r\n \"ProviderId\": 2000090505,\r\n \"ProviderEmail\": \"\"\r\n }"
operationId: PUTv3_rfps_{rfpId}_assign
consumes:
- application/json
- text/json
produces:
- application/json
- text/json
parameters:
- name: rfpId
in: path
description: The unique numeric identifier of the RFP to assign to the specified provider.
required: true
type: integer
format: int32
- name: request
in: body
description: The request to assign the RFP to another provider.
required: true
schema:
$ref: '#/definitions/ServiceChannel.Services.Messaging.Rfp.AssignRfpRequest'
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.\r\n <br/>Error codes:\r\n 502 — RFP not found\r\n 503 — Request is empty or null\r\n 503 — Provider is not valid\r\n 503 — Empty Provider E-Mail address ('ProviderEmail')"
schema:
$ref: '#/definitions/ServiceChannel.Services.Messaging.ErrorResponse'
'401':
description: "The request is not authorized.\r\n <br/>Error codes:\r\n 504 — API call rejected by security permissions"
schema:
$ref: '#/definitions/ServiceChannel.Services.Messaging.ErrorResponse'
'500':
description: The server was unable to complete the request due to an internal error.
schema:
$ref: '#/definitions/ServiceChannel.Services.Messaging.ErrorResponse'
deprecated: false
x-access: Subscribers
/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}
consumes: []
produces:
- application/json
- text/json
parameters:
- name: id
in: path
description: The unique numeric identifier of the RFP to delete.
required: true
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.\r\n <br/>Error codes:\r\n 502 — RFP not found\r\n 503 — RFP can only be deleted, if none of the proposals are approved"
schema:
$ref: '#/definitions/ServiceChannel.Services.Messaging.ErrorResponse'
'401':
description: "The request is not authorized.\r\n <br/>Error codes:\r\n 504 — API call rejected by security permissions"
schema:
$ref: '#/definitions/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.\r\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.\r\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}
consumes: []
produces:
- application/json
- text/json
parameters:
- name: number
in: path
description: The non-unique identifier of the RFP to delete.
required: true
type: string
- name: locationId
in: path
description: The unique numeric identifier of the location for which the RFP was created.
required: true
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.\r\n <br/>Error codes:\r\n 502 — RFP not found\r\n 503 — RFP can only be deleted, if none of the proposals are approved"
schema:
$ref: '#/definitions/ServiceChannel.Services.Messaging.ErrorResponse'
'401':
description: "The request is not authorized.\r\n <br/>Error codes:\r\n 504 — API call rejected by security permissions"
schema:
$ref: '#/definitions/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\r\n <br /> Dates without 'Dto' endings return UTC date format.\r\n <br /> Dates without 'Dto' endings are not recommended for using."
operationId: Rfps_GetRfps
consumes:
- application/json
produces:
- application/json
parameters:
- name: $expand
in: query
description: Expand a navigation property.
required: false
type: string
- name: $select
in: query
description: Select a set of properties to return.
required: false
type: string
- name: $filter
in: query
description: Filter a collection of resources addressed by a request URL.
required: false
type: string
- name: $orderby
in: query
description: Order resources by the specified property in the response.
required: false
type: string
- name: $top
in: query
description: Return the specified number of items in the response.
required: false
type: integer
- name: $skip
in: query
description: Skip the specified number of items in the response.
required: false
type: integer
- name: $count
in: query
description: Include the count of the matching resources in the response.
required: false
type: boolean
responses:
'200':
description: Indicates that the request succeeded and that the requested information is in the response.
schema:
type: array
items:
$ref: '#/definitions/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
consumes:
- application/json
produces:
- application/json
parameters:
- name: rfpId
in: path
description: ''
required: true
type: integer
format: int32
- name: $expand
in: query
description: Expand a navigation property.
required: false
type: string
- name: $select
in: query
description: Select a set of properties to return.
required: false
type: string
- name: $filter
in: query
description: Filter a collection of resources addressed by a request URL.
required: false
type: string
- name: $orderby
in: query
description: Order resources by the specified property in the response.
required: false
type: string
- name: $top
in: query
description: Return the specified number of items in the response.
required: false
type: integer
- name: $skip
in: query
description: Skip the specified number of items in the response.
required: false
type: integer
- name: $count
in: query
description: Include the count of the matching resources in the response.
required: false
type: boolean
responses:
'200':
description: Indicates that the request succeeded and that the requested information is in the response.
schema:
type: array
items:
$ref: '#/definitions/ServiceChannel.Services.Messaging.Rfp.Rfp'
deprecated: false
x-access: Subscribers
definitions:
ServiceChannel.Services.Messaging.RefrigerantTracking.AssetRefrigerant:
type: object
properties:
Id:
format: int32
type: integer
AssetId:
format: int32
type: integer
RefrigerantUsageType:
format: int32
type: integer
RackId:
type: string
RackEntityId:
format: int32
type: integer
CarbID:
type: string
IsCarbReporting:
default: false
type: boolean
SystemLocation:
format: byte
type: string
OperationalStatus:
format: byte
type: string
RefrigerantPartNumber:
type: string
PartNumberId:
format: int32
type: integer
RackTypeId:
format: int32
type: integer
CurrentCharge:
format: double
type: number
CurrentChargeMetrics:
format: double
type: number
CurrentChargeOunces:
format: double
type: number
ChargeDescriptionId:
format: int32
type: integer
ChargeProviderName:
type: string
EffectiveChargeDate:
format: date-time
type: string
RefrigerantChargeOptionId:
format: int32
type: integer
RackTypeName:
type: string
UserId:
format: int32
type: integer
TagId:
type: string
AssetTypeId:
format: int32
type: integer
RefrigerantPurposeId:
format: int32
type: integer
RefrigerantPurposeName:
type: string
ParentId:
format: int32
type: integer
CreateOperationalStatusHistory:
default: false
type: boolean
OperationStatusDate:
format: date-time
type: string
HasLeakDetector:
default: false
type: boolean
AssetLeakDetectorId:
format: int32
type: integer
InitialCharge:
default: false
type: boolean
RackType:
format: byte
type: string
NeedsRetrofitRetirement:
default: false
type: boolean
RequiresAutomaticLeakDetector:
default: false
type: boolean
ConnectedRackId:
format: int32
type: integer
PreviousConnectedRackId:
format: int32
type: integer
UpdatedDate:
format: date-time
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.InvoiceLabor:
description: Information on labor. Add a separate object for each worker. When two or more workers have the same `SkillLevel`,`LaborType`, and `HourlyRate`, use one object and specify `NumOfTech`.
type: object
properties:
Id:
format: int32
type: integer
InvoiceId:
format: int32
description: Invoice identifier.
type: integer
SkillLevel:
format: byte
description: 'The skill level of a worker. Valid values: `1` - Supervisor, `2` - Technician, `3` - Helper.'
type: string
LaborType:
format: byte
description: 'The type of the pay rate. Valid values: `1` - Regular, `2` - Overtime, `3` - Double time.'
type: string
NumOfTech:
format: byte
description: Number of workers.
type: string
HourlyRate:
format: double
description: Worker hourly rate.
type: number
Hours:
format: double
description: Total hours the worker spent to complete the work order.
type: number
Amount:
format: double
description: The amount of the labor charge. The sum of all `Amount` parameters in the `Labors` array must equal `InvoiceAmountsDetails.LaborAmount`.
type: number
IsOffShore:
description: Type of the shore (`1` - Onshore, `2` - Offshore).
default: false
type: boolean
ServiceType:
format: byte
description: Type of the service (`1` - Design Engineering, Architecture, Technical Service, `2` - Installation and Supervision, `3` - Survey and Troubleshooting).
type: string
CityPerformed:
description: City where services are performed.
type: string
RateDiscrepancyReason:
description: Rate discrepancy reason.
type: string
AgreedRate:
format: double
description: Agreed rate.
type: number
ApprovalCodeGroup:
$ref: '#/definitions/ServiceChannel.Services.Messaging.Invoices.InvoiceApprovalCodeGroup'
IsRateDiscrepancy:
default: false
type: boolean
readOnly: true
isNontaxableVATEU:
default: false
type: boolean
ServiceChannel.Services.Messaging.Assets.Warranty:
description: Object containing warranty parameters.
type: object
properties:
ExpirationDate:
format: date-time
description: Warranty expiration date based on the warranty expiration settings.
type: string
ProviderId:
format: int32
description: ID of a provider who is in charge of warranty services.
type: integer
NTE:
format: double
description: Maximum amount of money to be spent on warranty services in USD. Value -1 means that the amount is not applicable.
type: number
Priority:
description: Defines how quickly warranty services should be provided, for example, *Emergency-4 Hours*, *Normal-48 Hours*, *7 Days*.
type: string
PriorityId:
format: int32
type: integer
Category:
description: Warranty category, for example, *ADVISE ONLY*, *REPAIR*, *DISASTER*.
type: string
CategoryId:
format: int32
type: integer
Provider:
$ref: '#/definitions/ServiceChannel.Services.Messaging.Assets.WarrantyProvider'
description: Rules to choose Warranty Provider
Expiration:
$ref: '#/definitions/ServiceChannel.Services.Messaging.Assets.WarrantyExpiration'
description: Rules for Warranty Expiration
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.Services.Messaging.Providers.Provider:
type: object
properties:
Phone:
type: string
FullName:
description: Full Name
type: string
Address1:
description: Address1
type: string
Address2:
description: Adress2
type: string
City:
description: City
type: string
State:
description: State
type: string
Zip:
description: Zip
type: string
Country:
description: Country
type: string
MainContact:
description: Main Contact
type: string
DateCreated:
format: date-time
description: Date Created
type: string
LastUserDate:
description: Last User Date
type: string
SuperUser:
description: SuperUser
type: string
WebSite:
description: WebSite
type: string
Email:
description: Email
type: string
TaxId:
description: Tax Id
type: string
Trade:
description: Trade
type: string
ProcessingEmail:
description: Processing Email
type: string
FaxNumber:
description: Fax Number
type: string
SuiteFloor:
description: Suite Floor
type: string
MailInfo:
description: Mail Info
type: string
ImageFile:
description: Image File
type: string
ReturnMail:
description: Return Mail
type: string
MailFrequency:
format: int32
description: Mail Frequency
type: integer
FormId:
format: int32
description: Form Id
type: integer
Pager:
description: Pager
type: string
NightRequest:
format: int32
description: NightRequest
type: integer
ShortFormatEmail:
description: Short Format Email
type: string
LastTrainingDate:
format: date-time
description: Last Training Date
type: string
LastTrainingDateStr:
description: Last Training Date as a string
type: string
IsInternal:
description: Is Internal
default: false
type: boolean
IsOnOffShoreFeatureEnabled:
description: Is OnOffShoreFeature Enabled
default: false
type: boolean
Id:
format: int32
description: Id
type: integer
Name:
description: Name
type: string
DoNotDispatch:
description: DoNotDispatch enabled?
default: false
type: boolean
ServiceChannel.Services.Messaging.Invoices.InvoiceMaterial:
description: Information on the materials used. Add a separate object for each material.
type: object
properties:
Id:
format: int32
type: integer
InvoiceId:
format: int32
description: Invoice identifier.
type: integer
Description:
description: Name or description of the material. Length limit is 100 symbols.
type: string
PartNum:
description: Part, serial, or manufacturer number of the material. Length limit is 100 symbols.
type: string
UnitType:
format: byte
description: 'Unit of measurement. Valid values: 1 — Each; 2 — Box; 3 — Feet; 4 — Sqft; 5 — Lbs; 6 — Gal; 7 — Oz. Default value: 1.'
type: string
UnitPrice:
format: double
description: Price per unit.
type: number
PartName:
description: Part name.
type: string
MarkUpPercent:
format: double
description: Markup percent.
type: number
AgreedMarkUpPercent:
format: double
description: Agreed markup percent.
type: number
MarkUpDiscrepancyReason:
description: Mark up discrepancy reason.
type: string
AgreedPartPrice:
format: double
description: Agreed part price.
type: number
Quantity:
format: double
description: Quantity of the material.
type: number
Amount:
format: double
description: The amount of the material cost. The sum of all `Amount` parameters in the `Materials` array must equal `InvoiceAmountsDetails.MaterialAmount`.
type: number
ApprovalCodeGroup:
$ref: '#/definitions/ServiceChannel.Services.Messaging.Invoices.InvoiceApprovalCodeGroup'
IsMarkUpDiscrepancy:
description: Markup discrepancy.
default: false
type: boolean
IsPartPriceDiscrepancy:
description: Part price discrepancy.
default: false
type: boolean
PriceDiscrepancyReason:
description: Price discrepancy reason.
type: string
isNontaxableVATEU:
default: false
type: boolean
ServiceChannel.Services.Messaging.Users.MlpUserInfo:
type: object
properties:
Id:
format: int32
type: integer
MlpLevel:
type: string
MlpLocations:
type: array
items:
format: int32
type: integer
ServiceChannel.Services.Messaging.Users.AccessOptions:
description: Object listing locations, districts, regions, and trades a subscriber user has access to. Learn more about [granting access based on locations, districts, and regions](https://servicechannel.atlassian.net/wiki/spaces/SCU/pages/585107276/Location+District+Region+Access+Tab) in ServiceChannel University.
type: object
properties:
Locations:
description: Locations a user has access to.
type: array
items:
type: string
Districts:
description: Districts a user has access to.
type: array
items:
type: string
Regions:
description: Regions a user has access to.
type: array
items:
type: string
Trades:
description: Trades a user is permitted to work with.
type: array
items:
type: string
ServiceChannel.Services.Messaging.Workorders.WeatherEvent:
type: object
properties:
Id:
format: int32
type: integer
Name:
type: string
ServiceChannel.Services.Messaging.Workorders.AssigneeUser:
type: object
properties:
UserId:
format: int32
type: integer
UserName:
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:
default: false
type: boolean
EmailMyself:
default: false
type: boolean
MyEmail:
type: string
NotSavedRecommendation:
default: false
type: boolean
WorkOrderLabel:
$ref: '#/definitions/ServiceChannel.Api.Model.Label'
WorkOrderLabels:
type: array
items:
$ref: '#/definitions/ServiceChannel.Api.Model.Label'
Comment:
type: string
ServiceChannel.Services.Messaging.Rfp.AssignRfpRequest:
description: The request object to assign an RFP to a provider.
required:
- ProviderId
type: object
properties:
ProviderId:
format: int32
description: The unique numeric identifier of the provider to assign the RFP to.
type: integer
ProviderEmail:
description: Provider’s email address to send a notification about the assigned RFP to. The default is the email address of the provider who is assigned the RFP.
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: '#/definitions/ServiceChannel.Services.Messaging.Users.DashboardInfo'
description: Dashboard a subscriber user has access to.
Access:
$ref: '#/definitions/ServiceChannel.Services.Messaging.Users.AccessOptions'
description: List of locations, districts, regions, and trades a subscriber user has access to.
Limits:
# --- truncated at 32 KB (157 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/servicechannel/refs/heads/main/openapi/servicechannel-rfps-api-openapi.yml