Skip to main content

Request for Quotation API

1. Overview

Jakamo Request for Quotation UBL API (RFQ UBL API) is an XML-based (UBL 2.3) API for sending offer requests from the customer system and sharing them with a supplier via Jakamo. The API is part of the Jakamo Buyer API v2 and it accepts standard UBL 2.3 RequestForQuotation documents.

The API can create a new RFQ, update an existing RFQ, and add attachments to an RFQ. For retrieving suppliers' offers see (see 6.4 Retrieving suppliers' offers).

The same functionality is available in JSON format through the Jakamo Buyer API (JSON), which supports a wider set of RFQ features. See 9. UBL API compared with the JSON API.

If you already have an integration against the earlier Jakamo UBL RFQ API, see 10. Migration from the earlier UBL RFQ API.

1.1 Requirements how to get started

Request demo accounts from Jakamo Support Team (support@thejakamo.com) to create an RFQ integration from your system.

There are two similar Jakamo environments available for you: the test environment and the production environment.

In addition to the integration itself, the RFQ UBL API requires that

  • a Buyer API integration is enabled for your Jakamo company account,
  • an OAuth2.0 application is connected to that integration and granted the RFQ write credential,
  • a company mapping table is created and connected to the integration, and
  • user mappings are defined for every person who will act as the author of an RFQ.

Without a connected mapping table the API cannot identify suppliers or business units, and every request fails.

1.2 Steps to go to production

The transition from the Jakamo test environment to the Jakamo production environment requires the following actions:

1. Production account establishment in Jakamo

Create the Jakamo production account via the Jakamo registration page. Please ensure that there is only one production account existing for your company in Jakamo (avoid creating a double account).

2. RFQ integration activation

Ask Jakamo Support Team (support@thejakamo.com) to activate the Buyer API integration for you in the production environment. After the integration is available in the Jakamo production account, the Integrations page appears in the dropdown menu in the Jakamo user interface. The integration settings page is available for company admin users.

3. API authentication

Register an OAuth2.0 application in the Jakamo production account and connect it to the Buyer API integration. Make sure the application is granted the RFQ write credential. Please ensure using different credentials in each enabled integration in use.

4. User and company mappings configuration in Jakamo

Define user and company mappings on the Jakamo Integrations page.

5. Message endpoint configuration

Change messages' endpoint configurations from demo to production (see Jakamo RFQ UBL API endpoints).

6. Everything is ready!

You can now send requests for quotations to your suppliers through Jakamo.

2. Authorization

Jakamo RFQ UBL API uses OAuth2.0 as the authentication method. Every request must carry a valid access token:

Authorization: Bearer <access_token>

The OAuth2.0 application must

  • be connected to a Buyer API integration of your Jakamo company, and
  • be granted the RFQ write credential.

Jakamo resolves the integration and the buyer company from the access token. If the token is missing, expired or invalid, the API returns 401 Unauthorized. If the token is valid but the RFQ write credential is not granted, the API returns 403 Forbidden.

The RFQ is created in Jakamo on behalf of the author person identified in the XML message (see 7.2 Buyer party), not on behalf of the OAuth2.0 application.

3. RFQ UBL API endpoints

Jakamo environmentOperationHTTP requestJakamo API endpoint
Test environmentCreate new RFQPOSThttps://demo.thejakamo.com/api/v2/buyer/ubl/rfqs
Test environmentUpdate existing RFQPUThttps://demo.thejakamo.com/api/v2/buyer/ubl/rfqs
Test environmentAdd attachments to an RFQPOSThttps://demo.thejakamo.com/api/v2/buyer/ubl/rfqs/attachments
Production environmentCreate new RFQPOSThttps://www.thejakamo.com/api/v2/buyer/ubl/rfqs
Production environmentUpdate existing RFQPUThttps://www.thejakamo.com/api/v2/buyer/ubl/rfqs
Production environmentAdd attachments to an RFQPOSThttps://www.thejakamo.com/api/v2/buyer/ubl/rfqs/attachments

Request headers for the create and update operations:

HeaderRequiredDescription
AuthorizationyesBearer <access_token>
Content-Typeyesapplication/xml or text/xml. The body is always read as UTF-8.
X-Correlation-IdnoYour own tracking identifier. It is returned in the response body. If it is omitted, Jakamo generates one.

An OpenAPI description of these endpoints is available at https://demo.thejakamo.com/swagger/buyer-ubl/swagger.json ("Jakamo Buyer API (UBL XML)"). You can open it for example in Postman, or use it to generate a client with OpenAPI tooling.

4. Request response messages

Jakamo RFQ UBL API always returns an HTTP response status code and an XML response body. A successfully created RFQ returns 201 Created, a successfully updated RFQ returns 200 OK. Errors are returned as RFC 7807 problem documents with the content type application/problem+xml.

4.1 Successful response

<SuccessResponse>
<message>RFQ successfully created</message>
<resourceIdentifier>OFFER_REQUEST_ID</resourceIdentifier>
<correlationId>7c9f1a2e-2f4b-4c1e-9c0f-2a1b3c4d5e6f</correlationId>
</SuccessResponse>
  • messageRFQ successfully created (POST) or RFQ successfully updated (PUT).
  • resourceIdentifier – the RFQ number taken from RequestForQuotation/ID.
  • correlationId – the value of your X-Correlation-Id header, or a Jakamo generated identifier.

4.2 Error response

<problem xmlns="urn:ietf:rfc:7807">
<type>https://tools.ietf.org/html/rfc7231#section-6.5.1</type>
<title>Validation Error</title>
<status>400</status>
<detail>One or more validation errors occurred</detail>
<instance>/api/v2/buyer/ubl/rfqs</instance>
<correlationId>7c9f1a2e-2f4b-4c1e-9c0f-2a1b3c4d5e6f</correlationId>
<errors>
<error>
<field>Currency</field>
<message>Currency is required</message>
</error>
<error>
<field>organizations</field>
<message>Cannot find match for organization string: SELLER_ID</message>
</error>
</errors>
</problem>

The <errors> list is present for schema validation errors and for message validation errors. field is either the name of the failing field, the literal schema for XSD errors, or persons / organizations for failing mapping lookups.

4.3 Response status codes

The table below presents the most common API request responses from Jakamo RFQ UBL API.

HTTP response status codeResponse body titleAdditional information
201 CreatedRFQ successfully createdNew RFQ created and published to the supplier.
200 OKRFQ successfully updatedExisting RFQ updated.
400 Bad requestInvalid RequestThe request body was empty or could not be read.
400 Bad requestXSD Schema Validation ErrorThe XML is not valid UBL 2.3. Each <error> names the line number and the schema violation. Check the element names, namespaces and element order (see 5. UBL document requirements).
400 Bad requestUBL Conversion ErrorThe document could not be read as a UBL RequestForQuotation – for example a wrong root element, a wrong namespace or an unparseable date value.
400 Bad requestValidation Error, field = field nameA field is missing or its value is rejected by Jakamo. See 7.7 Content validation rules.
400 Bad requestValidation Error, field = organizations, message Cannot find match for organization string: XNo relationship was found between the buyer and the supplier party, or the buyer business unit is unknown. Check that you have the correct company mapping in RequestForQuotation/SellerSupplierParty/Party/PartyIdentification/ID and in RequestForQuotation/OriginatorCustomerParty/Party/PartyIdentification/ID.
400 Bad requestValidation Error, field = persons, message Cannot find match for person string: XMapping is missing for the author person or a contact person. Check the user mapping for RequestForQuotation/OriginatorCustomerParty/Party/Contact.
401 UnauthorizedUnauthorizedAuthentication failed because of a missing, expired or invalid access token, or because the token does not identify a Buyer API integration. Make sure you use the OAuth2.0 application connected to the Buyer API integration.
403 ForbiddenForbiddenThe RFQ write credential is not granted to the OAuth2.0 application.
404 Not foundNot FoundPUT only: no RFQ, or more than one RFQ, was found with the given RequestForQuotation/ID.
409 ConflictConflictThe RFQ cannot be modified in its current state.
422 Unprocessable entityUnprocessable EntityThe message was well-formed and the parties were identified, but Jakamo could not process it. See detail for the reason.
503 Service unavailableService UnavailableJakamo is temporarily unable to process the request. Retry later.
500 Internal server errorInternal Server ErrorAn error occurred in Jakamo. Report the correlationId to Jakamo support.

If a 4xx status code is returned, do not retry the request without modification. If a 5xx status code is returned the request may be retried, preferably with an exponential backoff strategy. If 429 Too many requests is returned, honour the Retry-After header.

5. UBL document requirements

The message must be a schema-valid UBL 2.3 RequestForQuotation document. Jakamo validates every incoming document against the official OASIS UBL 2.3 XSD schemas before reading any field, so a document that is not schema-valid is rejected with 400 XSD Schema Validation Error.

Namespaces. The root element must be RequestForQuotation in the UBL RequestForQuotation namespace:

<RequestForQuotation
xmlns="urn:oasis:names:specification:ubl:schema:xsd:RequestForQuotation-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">

Element order. UBL schemas use ordered sequences, so elements must appear in the order defined by the schema. The order used in the examples in section 6 is correct. Reordering elements causes an XSD validation error.

Elements required by the UBL 2.3 schema. cbc:IssueDate, cbc:IssueTime, cac:SellerSupplierParty and at least one cac:RequestForQuotationLine. Jakamo additionally requires the fields listed in 7.7 Content validation rules.

Unknown and unused elements. Elements that are not part of the UBL 2.3 schema are rejected. Elements that are valid UBL but not listed in 7. RFQ message field reference are accepted and ignored — they are not stored and not shown to the supplier.

Encoding. The body is always read as UTF-8, regardless of the charset parameter of the Content-Type header or of the XML declaration.

6. Request for quotation process in Jakamo

6.1 Create new RFQ

The customer creates a new offer request in Jakamo and shares it with a supplier by posting a RequestForQuotation message to the Jakamo RFQ UBL API. The RFQ is published to the supplier immediately when the message is accepted.

One UBL document is shared with one supplier. If the same offer request needs to be sent to several suppliers, post one document per supplier with a different RequestForQuotation/ID, or use the JSON API, which supports several suppliers on one RFQ.

Example: Creating a new RFQ (Offer request) to Jakamo (HTTP POST)
<?xml version="1.0" encoding="UTF-8"?>
<RequestForQuotation xmlns="urn:oasis:names:specification:ubl:schema:xsd:RequestForQuotation-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<!-- UBLVersionID and CustomizationID are accepted but not used by Jakamo -->
<cbc:UBLVersionID>2.3</cbc:UBLVersionID>
<cbc:CustomizationID>Jakamo</cbc:CustomizationID>
<!-- RFQ number. Identifies the RFQ in updates and in attachment uploads -->
<cbc:ID>OFFER_REQUEST_ID</cbc:ID>
<cbc:CopyIndicator>false</cbc:CopyIndicator>
<!-- IssueDate and IssueTime are required by the UBL schema, but not used by Jakamo -->
<cbc:IssueDate>2026-01-13</cbc:IssueDate>
<cbc:IssueTime>09:00:00</cbc:IssueTime>
<!-- Offer due date. Required, must be today or in the future -->
<cbc:SubmissionDueDate>2026-02-13</cbc:SubmissionDueDate>
<!-- Becomes both the title and the description of the RFQ -->
<cbc:Note>Bolts and washers for assembly line 3</cbc:Note>
<!-- Currency of the RFQ. Required, ISO 4217 -->
<cbc:PricingCurrencyCode>EUR</cbc:PricingCurrencyCode>
<!-- Project number. Only read when DocumentTypeCode is PROJECT -->
<cac:AdditionalDocumentReference>
<cbc:ID>PROJECT_REF_1</cbc:ID>
<cbc:DocumentTypeCode>PROJECT</cbc:DocumentTypeCode>
</cac:AdditionalDocumentReference>
<!-- Buyer: owning business unit and the author of the RFQ -->
<cac:OriginatorCustomerParty>
<cac:Party>
<cac:PartyIdentification>
<cbc:ID>BUYER_PARTY_ID</cbc:ID>
</cac:PartyIdentification>
<cac:Contact>
<cbc:ID>USER_ID</cbc:ID>
</cac:Contact>
</cac:Party>
</cac:OriginatorCustomerParty>
<!-- Supplier the RFQ is shared with. Exactly one supplier per document -->
<cac:SellerSupplierParty>
<cac:Party>
<cac:PartyIdentification>
<cbc:ID>SELLER_ID</cbc:ID>
</cac:PartyIdentification>
<!-- Optional supplier side contact person -->
<cac:Contact>
<cbc:ElectronicMail>sales@supplier.example</cbc:ElectronicMail>
</cac:Contact>
</cac:Party>
</cac:SellerSupplierParty>
<cac:RequestForQuotationLine>
<!-- Line identifier. Must be unique inside the document -->
<cbc:ID>1</cbc:ID>
<!-- Additional information shown to the supplier for this line -->
<cbc:Note>Zinc plated, grade 8.8</cbc:Note>
<cac:LineItem>
<!-- Buyer's item number -->
<cbc:ID>BUYERS_ITEM_ID</cbc:ID>
<!-- Requested quantity and unit of measure -->
<cbc:Quantity unitCode="PCE">100</cbc:Quantity>
<cac:Delivery>
<!-- Requested delivery date -->
<cac:RequestedDeliveryPeriod>
<cbc:StartDate>2026-03-28</cbc:StartDate>
</cac:RequestedDeliveryPeriod>
</cac:Delivery>
<cac:Item>
<cbc:Description>Hex bolt M12x40</cbc:Description>
<cbc:Name>ITEM NAME</cbc:Name>
<!-- Supplier's item number -->
<cac:SellersItemIdentification>
<cbc:ID>SELLERS_ITEM_ID</cbc:ID>
</cac:SellersItemIdentification>
</cac:Item>
</cac:LineItem>
</cac:RequestForQuotationLine>
</RequestForQuotation>

6.2 Update RFQ

The customer can update an offer request already posted to Jakamo. Use the same body message and change the HTTP request to use the PUT method. The RFQ is identified by RequestForQuotation/ID; if no RFQ or more than one RFQ matches that number, the API returns 404 Not Found.

An update replaces the whole RFQ and re-publishes it

The update is a full replace: the RFQ is rebuilt from the message you send. Lines that are not present in the message are removed. Always send the complete RFQ content in the update message.

Example: Updating a RFQ (Offer request) already existing in Jakamo (HTTP PUT)
<?xml version="1.0" encoding="UTF-8"?>
<RequestForQuotation xmlns="urn:oasis:names:specification:ubl:schema:xsd:RequestForQuotation-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cbc:UBLVersionID>2.3</cbc:UBLVersionID>
<cbc:CustomizationID>Jakamo</cbc:CustomizationID>
<!-- Same RFQ number as in the original message. This identifies the RFQ to update -->
<cbc:ID>OFFER_REQUEST_ID</cbc:ID>
<cbc:CopyIndicator>false</cbc:CopyIndicator>
<cbc:IssueDate>2026-01-20</cbc:IssueDate>
<cbc:IssueTime>09:00:00</cbc:IssueTime>
<!-- Due date moved forward -->
<cbc:SubmissionDueDate>2026-02-28</cbc:SubmissionDueDate>
<cbc:Note>Bolts and washers for assembly line 3 - revised quantities</cbc:Note>
<cbc:PricingCurrencyCode>EUR</cbc:PricingCurrencyCode>
<cac:AdditionalDocumentReference>
<cbc:ID>PROJECT_REF_1</cbc:ID>
<cbc:DocumentTypeCode>PROJECT</cbc:DocumentTypeCode>
</cac:AdditionalDocumentReference>
<cac:OriginatorCustomerParty>
<cac:Party>
<cac:PartyIdentification>
<cbc:ID>BUYER_PARTY_ID</cbc:ID>
</cac:PartyIdentification>
<cac:Contact>
<cbc:ID>USER_ID</cbc:ID>
</cac:Contact>
</cac:Party>
</cac:OriginatorCustomerParty>
<cac:SellerSupplierParty>
<cac:Party>
<cac:PartyIdentification>
<cbc:ID>SELLER_ID</cbc:ID>
</cac:PartyIdentification>
</cac:Party>
</cac:SellerSupplierParty>
<!-- All lines must be included: the RFQ is fully replaced by this message -->
<cac:RequestForQuotationLine>
<cbc:ID>1</cbc:ID>
<cbc:Note>Zinc plated, grade 8.8</cbc:Note>
<cac:LineItem>
<cbc:ID>BUYERS_ITEM_ID</cbc:ID>
<cbc:Quantity unitCode="PCE">1000</cbc:Quantity>
<cac:Delivery>
<cac:RequestedDeliveryPeriod>
<cbc:StartDate>2026-04-01</cbc:StartDate>
</cac:RequestedDeliveryPeriod>
</cac:Delivery>
<cac:Item>
<cbc:Description>Hex bolt M12x40</cbc:Description>
<cbc:Name>ITEM NAME</cbc:Name>
<cac:SellersItemIdentification>
<cbc:ID>SELLERS_ITEM_ID</cbc:ID>
</cac:SellersItemIdentification>
</cac:Item>
</cac:LineItem>
</cac:RequestForQuotationLine>
</RequestForQuotation>

6.3 Add attachments to an RFQ

Files can be attached to an existing RFQ. The attachment endpoint is not an XML endpoint: it takes a multipart/form-data request and returns a JSON response.

POST /api/v2/buyer/ubl/rfqs/attachments

Form fieldTypeRequiredDescription
rfqNumbertextyesThe RFQ number, that is, the value sent in RequestForQuotation/ID.
authorPersonIdentifiertextyesThe user mapping string of the person who adds the attachments. The same strings are used as in OriginatorCustomerParty/Party/Contact/ID.
filesfileyes, one or moreThe files to attach.
Example: Adding attachments to an existing RFQ (HTTP POST)
POST /api/v2/buyer/ubl/rfqs/attachments HTTP/1.1
Host: demo.thejakamo.com
Authorization: Bearer <access_token>
Content-Type: multipart/form-data; boundary=----Boundary

------Boundary
Content-Disposition: form-data; name="rfqNumber"

OFFER_REQUEST_ID
------Boundary
Content-Disposition: form-data; name="authorPersonIdentifier"

USER_ID
------Boundary
Content-Disposition: form-data; name="files"; filename="drawing.pdf"
Content-Type: application/pdf

<binary content>
------Boundary--

Response:

{
"message": "Attachments uploaded successfully",
"rfqNumber": "OFFER_REQUEST_ID",
"fileCount": 1
}

Responses of the attachment endpoint:

HTTP response status codeAdditional information
200 OKAll files were attached to the RFQ.
400 Bad requestrfqNumber, authorPersonIdentifier or the files are missing, or the person identifier has no user mapping.
404 Not foundNo RFQ, or more than one RFQ, was found with the given RFQ number.
500 Internal server errorOne or more files could not be attached. The upload is not atomic: some files may have been attached even when this code is returned. Check the RFQ in Jakamo before retrying.
503 Service unavailableJakamo is temporarily unable to process the request.

6.4 Retrieving suppliers' offers

This is an upcoming feature and will be made available in Q3 2026.

7. RFQ message field reference

This section lists everything Jakamo reads from the RequestForQuotation message and what each field does. Elements that are not listed here are not used.

7.1 Document header

UBL elementUsed asDescription
RequestForQuotation/IDRFQ numberIdentifies the RFQ. Used to find the RFQ when it is updated and when attachments are added. Required, maximum 100 characters. Should be unique inside your company.
RequestForQuotation/NoteRFQ title and descriptionShown to the supplier as the name and the description of the RFQ. Only the first Note element is read. Maximum 500 characters for the title, 5000 for the description. If no Note is given, the RFQ number is used as the title and the description is left empty.
RequestForQuotation/PricingCurrencyCodeCurrencyThe currency the supplier quotes in. Required, three uppercase letters (ISO 4217), for example EUR.
RequestForQuotation/SubmissionDueDateOffer due dateThe deadline for the supplier to submit the quotation. Required, must be today or in the future.
RequestForQuotation/AdditionalDocumentReference/IDProject numberRead only from the first AdditionalDocumentReference element, and only when its DocumentTypeCode is exactly PROJECT. Maximum 100 characters.
RequestForQuotation/AdditionalDocumentReference/DocumentTypeCodeSelectorMust be PROJECT for the project number to be read.

7.2 Buyer party – author and owning business unit

The buyer is identified in RequestForQuotation/OriginatorCustomerParty.

UBL elementUsed asDescription
OriginatorCustomerParty/Party/PartyIdentification/IDOwning business unitThe company or business unit that owns the RFQ in Jakamo. Must match a company mapping on the Integrations page. Only the first PartyIdentification is read. Required in practice.
OriginatorCustomerParty/Party/Contact/IDAuthor personThe Jakamo user who is shown as the author of the RFQ and on whose behalf the RFQ is created. Must match a user mapping on the Integrations page. This is the recommended way to identify the author.
OriginatorCustomerParty/Party/Contact/ElectronicMailAuthor person (fallback)Used as the author identifier when Contact/ID is not given. Must be a valid email address and must match a user mapping.
OriginatorCustomerParty/Party/Contact/NameAuthor person (fallback), and buyer responsible personUsed as the author identifier when neither Contact/ID nor Contact/ElectronicMail is given. In addition, whenever Contact/Name is present it is used as a buyer-side responsible person on the RFQ.
OriginatorCustomerParty/Party/PartyName/NameAccepted, not used. Companies are always identified by PartyIdentification/ID.
The contact name must also be mapped

The buyer contact is read twice: once as the author of the RFQ and once as a responsible person. The author is taken from Contact/ID (or the email, or the name), while the responsible person prefers Contact/Name and falls back to Contact/ElectronicMail. If you send both Contact/ID and Contact/Name, both strings must exist as user mappings, otherwise the request fails with Cannot find match for person string. The simplest configuration is to send only Contact/ID.

7.3 Supplier party

The supplier is identified in RequestForQuotation/SellerSupplierParty. Exactly one supplier can be given per document.

UBL elementUsed asDescription
SellerSupplierParty/Party/PartyIdentification/IDSupplierThe supplier the RFQ is shared with. Must match a company mapping on the Integrations page. Only the first PartyIdentification is read. Required.
SellerSupplierParty/Party/Contact/IDSupplier contact personOptional. The supplier-side contact person for the RFQ. Must match a user mapping.
SellerSupplierParty/Party/Contact/ElectronicMailSupplier contact person (fallback)Used when Contact/ID is not given. Must be a valid email address and must match a user mapping.
SellerSupplierParty/Party/Contact/NameSupplier contact person (fallback)Used when neither Contact/ID nor Contact/ElectronicMail is given. Must match a user mapping.
SellerSupplierParty/Party/PartyName/NameAccepted, not used.

7.4 RFQ lines

Each RequestForQuotation/RequestForQuotationLine becomes one requested item on the RFQ. A line that has no LineItem, or whose LineItem has no Item, is skipped without an error.

UBL element (inside RequestForQuotationLine)Used asDescription
IDLine identifierIdentifies the line inside the RFQ and binds the supplier's answers to it. Must be unique inside the document, maximum 100 characters. If it is omitted, Jakamo generates ITEM_1, ITEM_2, … which makes later updates unreliable, so always send it.
NoteAdditional informationFree text shown to the supplier for this line. Only the first Note is read. Maximum 5000 characters.
LineItem/IDBuyer's item numberYour item number for the requested item. Maximum 100 characters.
LineItem/QuantityRequested quantityThe quantity the supplier quotes. Must be greater than zero. One quantity per line.
LineItem/Quantity/@unitCodeUnit of measureFor example PCE, PCS, NIU, SET. Passed to Jakamo as given, maximum 20 characters.
LineItem/Delivery/RequestedDeliveryPeriod/StartDateRequested delivery dateThe delivery date requested for the line. Must be today or in the future. Only the first Delivery element is read, and only StartDate.
LineItem/Item/DescriptionItem descriptionDescription shown to the supplier. Only the first Description is read. Maximum 2000 characters.
LineItem/Item/NameItem nameMaximum 500 characters.
LineItem/Item/SellersItemIdentification/IDSupplier's item numberThe supplier's own item number for the item. Maximum 100 characters. Alternatively Item/CatalogueItemIdentification/ID with schemeID="VN" can be used.

7.5 Values Jakamo sets automatically

ValueBehaviour
PublishingThe RFQ is always published to the supplier when the message is accepted, both on create and on update. There is no way to create a draft RFQ through the UBL API.
Questions to suppliersNever set. UBL 2.3 has no standard representation for RFQ questions. Use the JSON API if you need questions.
Requested propertiesLeft to the Jakamo default, which defines the fields the supplier is asked to fill in, such as price and lead time.
Provided propertiesDerived from the message: the supplier always sees the buyer's item number, item name, quantity and unit, plus the description, additional information, requested delivery date and supplier's item number for those fields that are present in the message.

7.6 Elements that are not read

The following elements are valid UBL 2.3 and are accepted by the API, but Jakamo does not read them. They are listed so that you can be sure they will have no effect on the RFQ.

UBL elementNote
UBLVersionID, CustomizationID, ProfileID, UUID, CopyIndicator, LineCountNumericDocument metadata.
IssueDate, IssueTimeRequired by the UBL schema, not used by Jakamo.
BuyerCustomerPartyUse OriginatorCustomerParty for the buyer party.
AdditionalDocumentReference with any DocumentTypeCode other than PROJECTOnly the project number is read from additional document references.
ProjectReferenceUse AdditionalDocumentReference with DocumentTypeCode = PROJECT.
RequestForQuotationLine/DocumentReference, for example a contract referenceContract numbers cannot be set through the UBL API.
LineItem/LineExtensionAmount, LineItem/Price, LineItem/AllowanceCharge, LineItem/PricingReferenceNo price, base quantity or discount information is read from an RFQ.
RequestedDeliveryPeriod/EndDate and DurationMeasure, second and further Delivery elementsOnly the first Delivery and its StartDate are read.
Item/BuyersItemIdentification, including ExtendedIDThe buyer's item number comes from LineItem/ID. Item revision cannot be set through the UBL API.
Item/ItemSpecificationDocumentReference, for example a drawing numberDrawing numbers cannot be set through the UBL API.
Item/CommodityClassification, Item/OriginCountry, Item/ClassifiedTaxCategory, Item/AdditionalInformation, Item/KeywordNot used.
Document level Delivery, DeliveryTerms, DestinationCountry, Contract, RequestedValidityPeriod, Signature, UBLExtensionsNot used.
LineItem/MinimumQuantity, LineItem/MaximumQuantity and other line quantitiesOnly Quantity is read. Annual volume, minimum order quantity and price list group are available in the JSON API only.

7.7 Content validation rules

After the message has passed XSD validation, Jakamo validates the content. A failure returns 400 Validation Error with the field name in the <field> element.

FieldRule
RFQ number (ID)Required, maximum 100 characters.
Title (first Note, or ID)Required, maximum 500 characters.
Description (first Note)Maximum 5000 characters.
Project numberMaximum 100 characters.
Currency (PricingCurrencyCode)Required, exactly three uppercase letters.
Offer due date (SubmissionDueDate)Required, today or later.
Author personRequired, and must match a user mapping.
SupplierRequired, and must match a company mapping.
Line identifiersUnique inside the document, maximum 100 characters each.
Requested quantityGreater than zero.
Requested delivery dateToday or later.
Unit of measureMaximum 20 characters.
Item description / name / supplier's item number / buyer's item numberMaximum 2000 / 500 / 100 / 100 characters.
Line additional informationMaximum 5000 characters.
Every identifierMaximum 500 characters. Email identifiers must be valid email addresses.

7.8 Identifier schemes

By default the identifiers you send in PartyIdentification/ID and Contact/ID are treated as mapping table entries, that is, as the strings you have configured on the Jakamo Integrations page. The optional schemeID attribute can be used to state that the identifier is a standard business identifier instead:

schemeID on PartyIdentification/IDInterpreted as
GLNGlobal Location Number
DK:CVRDanish CVR number
DK:SEDanish SE number
omitted or any other valueMapping table entry
schemeID on Contact/IDInterpreted as
EMAILEmail address of the Jakamo user
omitted or any other valueMapping table entry

The value of schemeID is compared case-insensitively.

note

Whichever scheme you use, the identifier string itself must exist in your Jakamo integration mappings — the scheme only describes what kind of identifier it is. Do not use schemeID="GLN" on Contact/ID: a person cannot be identified by a GLN and the message is rejected.

8. User and company mappings in the Jakamo integration settings

Mapping configurations to identify the buyer, the author and the supplier in Jakamo are made in the Jakamo user interface on the Integrations page. Integration settings are available for you after the integration is activated for you in the Jakamo test environment and Jakamo production environment by Jakamo. See Jakamo's general integration mappings instructions from the User Guide.

Both a user mapping and a company mapping are required. The company mappings are kept in a mapping table that must be connected to the Buyer API integration on the Integrations page; if no mapping table is connected, every request fails.

8.1 User mapping – Map your ERP users to your Jakamo users

ERP users (buyers, purchasers, supplier responsibles) who will create offer requests via Jakamo must have their personal user accounts in Jakamo. A user has to have some identifier (string, email address, username, buyer number…) in the ERP, and that identifier will be transferred in the RFQ XML data (RequestForQuotation/OriginatorCustomerParty/Party/Contact/ID). This ERP identifier must be linked to the Jakamo user so that Jakamo can identify the author of the message. The RFQ integration requires passing this user information in the RFQ message when creating a new RFQ or updating an existing RFQ.

Create the required user mappings on the Integrations page. From that page can be found all the integrations in use. Under the User Strings, click ADD USER and create user mappings between Jakamo users and users in the ERP system. To be able to add a mapping, the user has to have a personal user account in Jakamo.

  • User identifier refers to the identifier string that you send in RequestForQuotation/OriginatorCustomerParty/Party/Contact/ID.
  • Jakamo account refers to the user's account in Jakamo. The Jakamo account dropdown includes the users who have their user accounts established in Jakamo.

The same user strings are used for the supplier-side contact person and for the authorPersonIdentifier field of the attachment endpoint.

8.2 Vendor mapping – Map your ERP suppliers to Jakamo companies

A relationship with the supplier company in Jakamo has to be established before any messages can be sent via Jakamo. A supplier has to have some identifier (string, for example a vendor number) in the ERP, and it will be transferred in the XML data (RequestForQuotation/SellerSupplierParty/Party/PartyIdentification/ID). This ERP identifier must be linked to the Jakamo company so that Jakamo can identify the receiving party.

Create company mappings on the Integrations page. From that page can be found all the integrations in use. Under the Company Strings, click ADD COMPANY and create a mapping between your ERP company (a supplier) and the Jakamo relationship. To be able to add a mapping, the relationship with that company has to exist in Jakamo.

  • Company identifier refers to the identifier string incoming in RequestForQuotation/SellerSupplierParty/Party/PartyIdentification/ID.
  • Jakamo company refers to the supplier account that needs to be mapped to this supplier identifier. The Jakamo company dropdown menu includes a list of supplier companies your account has a relation established with in Jakamo.

The same company mappings are used for your own business units, which are identified in RequestForQuotation/OriginatorCustomerParty/Party/PartyIdentification/ID.

9. UBL API compared with the JSON API

The RFQ UBL API and the Jakamo Buyer API (JSON) create the same RFQ in Jakamo, but the JSON API supports a wider set of RFQ features.

FeatureUBL APIJSON API
Questions to suppliers, general and per lineNot supportedSupported
Several requested quantities (quantity tiers) per lineNot supported, one quantity per lineSupported
Annual volume, minimum order quantity, price list group, contract number, item revision, drawing number, technical specificationsNot supportedSupported
Choosing the fields the supplier is asked to fill inNot supported, Jakamo default is usedSupported
Creating an unpublished draft RFQNot supported, always publishedSupported
AttachmentsSupportedSupported

10. Migration from the earlier UBL RFQ API

This section is for integrations that already send UBL request for quotation messages to the earlier Jakamo RFQ API at /api/rfq. If you are building a new integration, you can skip this section.

The message is still a UBL RequestForQuotation document, but this is a new API rather than a new version of the old one: the endpoint, the authentication, the validation and several element paths have changed. Plan the migration as a rewrite of the message template rather than as a change of the endpoint address.

10.1 Endpoint, authentication and responses

TopicEarlier UBL RFQ APIThis API
Endpoint/api/rfq/api/v2/buyer/ubl/rfqs
Create / updatePOST / PUT to the same addressPOST / PUT to the same address (unchanged)
AuthenticationBasic authentication or OAuth2.0OAuth2.0 only
Success response200 OK, mostly without a body201 Created on create and 200 OK on update, always with an XML body naming the RFQ number and the correlation id
Error responsePlain text or a short XML messageRFC 7807 problem document, application/problem+xml, with one <error> element per problem
Schema validationLenientStrict validation against the official UBL 2.3 XSD schemas. Element order and element names must match the schema.
Reading suppliers' offersGET /api/rfq/response with an incoming message queue and the x-acknowledge-uri headerNot available in this API. Offers are visible in the Jakamo user interface.

10.2 Message content that has to change

PurposeEarlier UBL RFQ APIThis API
Author of the RFQBuyerCustomerParty/BuyerContact/IDOriginatorCustomerParty/Party/Contact/ID
Buyer company or business unitBuyerCustomerParty/Party/PartyIdentification/IDOriginatorCustomerParty/Party/PartyIdentification/ID
SupplierSellerSupplierParty/Party/PartyIdentification/IDSellerSupplierParty/Party/PartyIdentification/ID (unchanged)
Several suppliers on one RFQAdditionalDocumentReference/ID with DocumentTypeCode = ASSP, one element per additional supplierNot supported. Send one document per supplier, each with its own RequestForQuotation/ID, or use the JSON API. ASSP references are ignored.
Project numberProjectReference/IDAdditionalDocumentReference/ID with DocumentTypeCode = PROJECT
CurrencyTaken from the currencyID attributes of the price elementsPricingCurrencyCode in the document header. Required.
Offer due dateSubmissionDueDate, optionalSubmissionDueDate, required and must be today or in the future
Buyer's item numberLineItem/Item/BuyersItemIdentification/IDLineItem/ID
Supplier's item numberLineItem/Item/SellersItemIdentification/IDLineItem/Item/SellersItemIdentification/ID (unchanged)
Requested delivery dateLineItem/Delivery/RequestedDeliveryPeriod/EndDateLineItem/Delivery/RequestedDeliveryPeriod/StartDate
Item revisionItem/BuyersItemIdentification/ExtendedIDNot supported in UBL. Available in the JSON API.
Drawing numberItem/ItemSpecificationDocumentReference/ID with DocumentTypeCode = 174Not supported in UBL. Available in the JSON API.
Contract numberRequestForQuotationLine/DocumentReference/ID with DocumentTypeCode = 315Not supported in UBL. Available in the JSON API.
Prices, discounts and line totalsLineItem/Price, LineItem/AllowanceCharge, LineItem/LineExtensionAmountNot read. An RFQ asks the supplier for prices, so no price information is imported.
RFQ title and descriptionTaken from NoteTaken from Note (unchanged). The first Note becomes both the title and the description.
Line additional informationRequestForQuotationLine/NoteRequestForQuotationLine/Note (unchanged)

10.3 Behaviour that has changed

  • The RFQ is always published. A message accepted by this API is shared with the supplier immediately, both on create and on update.
  • An update replaces the whole RFQ. Send the complete content in every PUT; lines missing from the message are removed from the RFQ, and the RFQ is published to the supplier again.
  • Attachments have their own endpoint. Files are no longer part of the RFQ message; use POST /api/v2/buyer/ubl/rfqs/attachments (see 6.3).
  • UBL version. The namespace URIs are unchanged, but documents are validated against the UBL 2.3 schemas. A document built for UBL 2.1 usually validates, but verify it against the 2.3 schemas before going live. UBLVersionID and CustomizationID are accepted and ignored, so they can be left as they are or removed.

10.4 Migration checklist

  1. Register an OAuth2.0 application and connect it to the Buyer API integration; grant it the RFQ write credential.
  2. Keep your existing user and company mappings — the mapping strings are the same. Verify that the buyer business unit identifier is mapped, since it is now sent in OriginatorCustomerParty.
  3. Rewrite the message template according to 10.2 and validate the result against the UBL 2.3 schemas.
  4. Remove price, discount, contract, drawing and revision elements, or accept that they are ignored.
  5. Split multi-supplier messages into one message per supplier, or move that use case to the JSON API.
  6. Update the response handling: expect 201 Created on create and parse the problem document on errors. Store the correlationId from the response for support requests.
  7. Test the whole flow in the test environment, then repeat the configuration in production.
Help & Support

Didn't you find what you were looking for? Send an email to Jakamo support (support@thejakamo.com) and we will help you.