> ## Documentation Index
> Fetch the complete documentation index at: https://www.composer.id/llms.txt
> Use this file to discover all available pages before exploring further.

# Coupa

> Coupa (Vendor Management & Sourcing): the API posture, publish target and field mapping composerID publishes a decision reference through.

This page records how composerID publishes into Coupa: the vendor's API posture, the publish target and field mapping, and the documentation each claim rests on. It is for anyone evaluating the connection or building against it.

Coupa is a Business Spend Management platform with a single clean REST surface. Contingent and services spend (SOW, Coupa Contingent Workforce) sits on top of requisitions, contracts and purchase\_orders. composerID publishes canonical intent into those resources.

<Info>
  Category: Vendor Management & Sourcing. Coverage status: Specification mapped. Vendor documentation: public developer portal.
</Info>

## Integration path

How composerID connects to this destination, at a glance.

| Step                 | Detail                                                                                   |
| -------------------- | ---------------------------------------------------------------------------------------- |
| Authentication       | OAuth 2.0 / OIDC client-credentials with scopes.                                         |
| composerID publishes | Requisition (Contingent): POST /api/requisitions                                         |
| Intent ID lands on   | `requisition` `custom-fields.intent-id`, written into the destination record             |
| Back-sync            | Webhooks and polling: some lifecycle events are pushed, the rest are read on a schedule. |

## Vendor documentation

<Columns cols={2}>
  <Card title="The Coupa Core API (Compass)" icon="external-link" href="https://compass.coupa.com/en-us/products/product-documentation/integration-technical-documentation/the-coupa-core-api" horizontal />

  <Card title="Coupa Core API: Get Started" icon="external-link" href="https://compass.coupa.com/en-us/products/product-documentation/integration-technical-documentation/the-coupa-core-api/get-started-with-the-api" horizontal />

  <Card title="OAuth 2.0 and OIDC" icon="external-link" href="https://compass.coupa.com/en-us/products/product-documentation/integration-technical-documentation/the-coupa-core-api/oauth-2.0-and-oidc" horizontal />

  <Card title="Exception handling & rate limits" icon="external-link" href="https://compass.coupa.com/en-us/products/product-documentation/integration-technical-documentation/the-coupa-core-api/get-started-with-the-api/exception-handling-and-error-codes" horizontal />
</Columns>

## API posture

| Aspect         | Detail                                                                                                                                                 |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Authentication | OAuth 2.0 / OIDC client-credentials with scopes. Token POST https\://\{instance}.coupahost.com/oauth2/token. Legacy X-COUPA-API-KEY header is retired. |
| Style          | REST, JSON or XML via Accept header                                                                                                                    |
| Base URL       | https\://\{instance}.coupahost.com/api/\{resource}  (events at https\://\{instance}.cso.coupahost.com/api/events)                                      |
| Webhooks       | Poll-first via updated-at filters. Events API (CSO) + configurable webhooks supplement; not comprehensive native webhooks.                             |
| Events posture | Webhooks and polling                                                                                                                                   |
| Rate limits    | 25 requests/second, burst queue \~20; exponential backoff on 429/503.                                                                                  |
| Objects        | requisitions, purchase\_orders, invoices, contracts, suppliers, quote\_requests, expenses, budget\_lines                                               |

## Publish target and field mapping

Each object below pairs the canonical intent fields with the destination's own fields and operations. The mapping is indicative until it is confirmed against a tenant at onboarding.

<AccordionGroup>
  <Accordion title="Requisition (Contingent)" icon="arrow-right-left" description="Create external worker request">
    | Mapping                  | Detail                                                          |
    | ------------------------ | --------------------------------------------------------------- |
    | Canonical to destination | role\_title, start\_date, end\_date, cost\_center, worker\_type |
    | Target                   | POST /api/requisitions                                          |
    | Requirement              | Required                                                        |
    | Notes                    | CCW / Services modelled on requisitions                         |
  </Accordion>

  <Accordion title="Statement of Work" icon="arrow-right-left" description="Services / SOW engagement">
    | Mapping                  | Detail                                                          |
    | ------------------------ | --------------------------------------------------------------- |
    | Canonical to destination | service\_category, sow\.summary, deliverables\[], budget, dates |
    | Target                   | /api/contracts + /api/requisitions                              |
    | Requirement              | Tenant required                                                 |
    | Notes                    | Verify CCW module resource name per tenant                      |
  </Accordion>

  <Accordion title="Intent ID correlation" icon="arrow-right-left" description="Carry the Intent ID">
    | Mapping                  | Detail                                                                 |
    | ------------------------ | ---------------------------------------------------------------------- |
    | Canonical to destination | intent\_id, intent\_version                                            |
    | Target                   | custom-fields on the requisition / order header                        |
    | Requirement              | Required                                                               |
    | Notes                    | Coupa custom fields are instance-configured and queryable once defined |
  </Accordion>

  <Accordion title="Purchase Order" icon="arrow-right-left" description="Read for back-sync">
    | Mapping                  | Detail                               |
    | ------------------------ | ------------------------------------ |
    | Canonical to destination | po\_number, supplier, amount, status |
    | Target                   | GET /api/purchase\_orders            |
    | Requirement              | Required                             |
    | Notes                    | Used for reconciliation              |
  </Accordion>
</AccordionGroup>

<Note>
  SOW / Contingent Workforce is not a distinct top-level REST resource; confirm the CCW module resource name in your tenant. Each customer has a separate sandbox instance with its own OAuth clients and scopes.
</Note>

## Next steps

<Columns cols={3}>
  <Card title="How composerID connects" icon="plug-zap" href="/guides/connect">
    The five ways composerID reaches a destination, and the minimum a destination must offer.
  </Card>

  <Card title="Publishing" icon="send" href="/concepts/publishing">
    Plan, preflight and publish: how a decision becomes a valid record in a destination.
  </Card>

  <Card title="All destinations" icon="plug" href="/destinations">
    Every destination composerID documents, with its category and coverage status.
  </Card>
</Columns>
