HTTP extraction from Coupa
Use the following settings to configure the connection and HTTP extraction for a Coupa system.
Disclaimer
Any references to third-party applications in this documentation are provided solely for informational purposes. Such references do not constitute any contractual commitment, representation, or warranty of any kind. The information is provided “as is,” and no guarantee is made as to the accuracy, completeness, or currentness of information relating to third-party applications.
Connection
REST-API base URL
The typical base URL for Coupa REST APIs follows this format.
https://{instance_name}.coupahost.com
Key points:
Replace <instance_name> with your company instance name.
Test-connection resources
The simplest endpoint to test connectivity:
GET /api/invoices
Supported authentication methods
Bearer token
OAuth 2.0 (client credentials)
Requires:
Client ID
Client Secret
Scope(s)
Tip
Use the Setup in Coupa to create a new OAuth client. Select the scopes that the client can access. Common mandatory scopes are openid, profile, email, offline_access, and core.common.read. Wenn saving the new client, Coupa generates the client ID and client secret. For more information on using the Coupa Setup, please refer to the Coupa documentation.
Permissions or scopes
Scopes define access to specific resources.
Examples
Resource | Endpoint(s) | Scope(s) |
|---|---|---|
Accounts | GET /accounts, POST /accounts | core.accounting.read, core.accounting.write |
Invoices | GET /invoices, POST /invoices | core.invoice.read, core.invoice.write |
Extraction
Coupa API Resource Endpoints
Note that each sample response structure is simplified to show the main fields typically returned by Coupa. Actual responses may include more nested objects and links.
Resource type | Endpoint | Method | Sample response structure |
|---|---|---|---|
Invoices | /api/invoices | GET | {"invoices":[{"id":"","invoice_number":"","supplier":{"id":"","name":""},"status":"","total":"","currency":"","created_at":"","updated_at":""}]}
|
Purchase orders | /api/purchase_orders | GET | {"purchase_orders":[{"id":"","po_number":"","supplier":{"id":"","name":""},"status":"","total":"","currency":"","created_at":"","updated_at":""}]}
|
Suppliers | /api/suppliers | GET | {"suppliers":[{"id":"","name":"","status":"","created_at":"","updated_at":""}]}
|
Accounts | /api/accounts | GET | {"accounts":[{"id":"","code":"","description":"","active":true,"created_at":"","updated_at":""}]}
|
Pagination
Type: Offset-based
Parameters:
offset (starting index)
limit (max records per page, default 50)
Example
GET /api/invoices?offset=100&limit=50
Limitations and known issues
Rate limits
Typically, 50 records per page
API throttling may apply (check Coupa instance settings)
Data freshness
Data may be cached; real-time updates depend on Coupa configuration.
Known bugs or API instabilities
Pagination with date filters can cause 400 errors if parameters are not correct formatted.
(Workaround: Ensure proper encoding of query parameters.)