PO's and PO Changes Integration into your ERP
Step-by-step instructions to integrate your Coupa PO's and PO Changes with your ERP.
![](/DITARoot/icons/tip.png)
You can also download this document as a Microsoft Word document: Coupa Purchase Orders to ERP.docx
General API setup considerations
-
Open Connect API Access (R29 onward)
-
GraphQL (R30 onward)
Limited payload - fields & API filters
Coupa's API returns a lot of data by default (for example: full objects for associated objects). The API return payloads can be very large and therefore slow.
To make things easier, Coupa includes a Fields query parameter and API Filters to return a limited JSON or XML response instead of the entire schema and all associations for an object. For more information, see API Response Filters.
Use cases described in this article
The assumption in this document is that the Purchase Order number in the ERP is driven by the Coupa Purchase Order Number. This Article describes three different options to Integrate Coupa Purchase Orders into your ERP (for both creation and updates).
These options will change the way you can monitor your integrations from Coupa:
-
Option 1: Simple monitoring based on custom field(s) you define on the Order Header
-
Option 2: Advanced monitoring using Integration History records
-
Option 3: Leverage full Coupa integration monitoring
For the three options, the Coupa POs are pushed to the ERP based on the Export flag.
In case of an error, in the Integration of a PO, a manual change will be required on the PO in the Coupa UI: this change will reset the Export flag, and the PO will therefore be considered in the next run.
![](/DITARoot/icons/tip.png)
You can contact Coupa Support to enable this option: Reset PO last exported at for every change. This setting only applies to the UI. Changes made with API won’t change the Exported status.
Create dedicated Integration and Contact for API
For option 2 & 3 described above, you need to create:
-
A dedicated Integration for each API Orchestration you implement.
-
One or several Integration contact(s) for each integration, that will be alerted for any failed integration.
![](/DITARoot/icons/tip.png)
You can contact Coupa Support to enable this option: Enable link to Integration History by Document Type. This setting adds a link in the setup page to view full Integration History per document type
Option 1: Simple monitoring based on custom field(s)
Description
In this
scenario, for each PO we will add the current Integration status in one or several PO header
custom field(s). We added a custom field cf-integration-status
with the
name of Integration Status
. Use the Standard PO Data Table to follow up the
Integration status of your documents at this
url:
https://<your instance hostname>/order_headers
Orchestration diagram
![](../images/po-orchistration.png)
Steps / API calls details
Step 1 |
Get the list and details of the Coupa Purchase Orders to create/update in the ERP. Selection criteria includes the Export Flag and PO Status. Query parameter show_deleted_lines can be necessary to handle the PO update in the ERP |
---|---|
Method |
GET |
API |
|
Query Params |
|
Sample URL |
https://<your instance hostname>/api/purchase_orders?filter=<your API filter name>&offset=10&exported=false&show_deleted_lines=true&status[in]=issued,canceled,closed |
Response body sample |
![]() |
![](/DITARoot/icons/important.png)
show_deleted_lines=true
query parameter is
for PO changes.
Step 2 |
Mark individual PO as exported |
---|---|
Method |
PUT |
API |
|
Query Params |
|
Sample URL |
|
Query Body sample |
N/A * |
Response Body sample |
|
![](/DITARoot/icons/important.png)
For this call you do not need a payload if you include ?exported=true
in
the URL. That’s where the creation/update of the PO in the ERP happens.
Step 3 |
Update a Custom Fields for Reporting |
---|---|
Method |
PUT |
API |
|
Query Params |
|
Sample URL |
|
Query Body sample |
or
|
Response Body sample |
or
|
Option 2: Advanced monitoring using Integration History
Description
In this scenario, for each PO we:
-
Resolve the previous Integration History Record for the document
-
Create an Integration History Record
-
Create an Alert to the Integration Contact in case of an error
Use the Standard PO Integration History Data Table to follow up the Integration status of your documents. You can find it at:
https://<your instance hostname>/integration_history_records/purchase_orders
You can use a filter on Response Code to differentiate between documents successfully replicated and documents that failed.
Orchestration Diagram
Steps / API calls details
Step 1 |
Get the list and details of the Coupa Purchase Orders to create/update in the ERP. Selection criteria includes the Export Flag and PO Status. Query parameter show_deleted_lines can be necessary to handle the PO update in the ERP |
---|---|
Method |
GET |
API |
|
Query Params |
|
Sample URL |
|
Response body sample |
![]() |
Step 2 |
Mark individual PO as exported |
---|---|
Method |
PUT |
API |
|
Query Params |
|
Sample URL |
|
Query Body sample |
N/A |
Response Body sample |
|
This is where the creation/update of the PO in the ERP happens.
Step 3a |
Get unresolved Integration History Record |
---|---|
Method |
GET |
API |
|
Query Params |
|
Sample URL |
|
Query Body sample |
N/A |
Response Body sample |
|
Step 3b |
Resolve previous Integration History Record |
---|---|
Method |
PUT |
API |
|
Query Params |
|
Sample URL |
|
Query Body sample |
N/A |
Response Body sample |
|
Step 4a |
Create Integration History (Success) |
---|---|
Method |
POST |
API |
|
Query Params |
|
Sample URL |
|
Query Body sample |
|
Response Body sample |
|
Step 4b |
Create Integration History (Error) and alert to Integration Contact |
---|---|
Method |
POST |
API |
|
Query Params |
|
Sample URL |
|
Query Body sample |
|
Response Body sample |
|
Option 3: Leverage full Coupa integration monitoring
Description
In this scenario, we create an Integration run that tracks
-
The status of the Integration (pending/started/errored/successful/failed)
-
The total number of PO processed
-
The number of Success and Errors
-
The list of Integration Errors and their statuses (resolved or not)
For each PO we:
-
Resolve the previous Integration History Record for the document
-
Create an Integration History Record
-
In case of an error, create an Integration Error and an Alert to the Integration Contact
You can monitor all Integration Runs for your Integration at:
https://<your instance hostname>/integrations/<your integration id>/integration_runs
Use the Standard PO Integration Error Data Table to list all POs with Integration Error pending resolution. It's located at:
https://<your instance hostname>/integration_errors
Use the Standard PO Integration History Data Table to list all POs successfully Integrated. It's located at:
https://<your instance hostname>/integration_history_records/purchase_orders
Orchestration diagram
![](../images/orchestration-3.png)
Steps / API calls details
Step 1 |
Create Integration Run |
---|---|
Method |
POST |
API |
|
Query Params |
N/A |
Query Body sample |
|
Response Body sample |
|
Step 2 |
Get the list and details of the Coupa Purchase Orders to create/update in the ERP. Selection criteria includes the Export Flag and PO Status. Query parameter show_deleted_lines can be necessary to handle the PO update in the ERP |
---|---|
Method |
GET |
API |
|
Query Params |
|
Sample URL |
|
Response body sample |
![]() |
Step 3 |
Start Integration Run |
---|---|
Method |
PUT |
API |
|
Query Params |
N/A |
Query Body sample |
|
Response Body sample |
|
Step 4 |
Mark individual PO as exported |
---|---|
Method |
PUT |
API |
|
Query Params |
|
Sample URL |
|
Query Body sample |
N/A |
Response Body sample |
|
This is where the creation/update of the PO in the ERP happens.
Step 5a |
Get unresolved Integration History Record |
---|---|
Method |
GET |
API |
|
Query Params |
|
Sample URL |
|
Query Body sample |
N/A |
Response Body sample |
|
Step 5b |
Resolve previous Integration History Record |
---|---|
Method |
PUT |
API |
|
Query Params |
|
Sample URL |
|
Query Body sample |
N/A |
Response Body sample |
|
Step 6a |
Get unresolved Integration Error Record |
---|---|
Method |
GET |
API |
|
Query Params |
|
Sample URL |
|
Query Body sample |
N/A |
Response Body sample |
|
Step 6b |
Resolve previous Integration History Record |
---|---|
Method |
PUT |
API |
|
Query Params |
N/A |
Query Body sample |
N/A |
Response Body sample |
|
Step 7a |
Create Integration History (Success) It must reference the Integration Run |
---|---|
Method |
POST |
API |
|
Query Params |
|
Sample URL |
|
Query Body sample |
|
Response Body sample |
|
Step 7b |
Create Integration Error and alert to Integration Contact It must reference the Integration Run |
---|---|
Method |
POST |
API |
|
Query Params |
N/A |
Query Body sample |
|
Response Body sample |
|
Step 8 |
Successfully End Integration Run |
---|---|
Method |
PUT |
API |
|
Query Params |
N/A |
Query Body sample |
N/A |
Response Body sample |
|
If there is a general failure during the Integration run
Step x |
Raise Failure for the Integration Run |
---|---|
Method |
PUT |
API |
|
Query Params |
N/A |
Query Body sample |
N/A |
Response Body sample |
|