The Customer Service Management (CSM) request intake APIs allow you to create requests from contact-centre interactions and enrich them with transcripts, agent notes, and follow-up detail.
Customer service agents work primarily in their external system (for example, a telephony platform, IVR, voice bot, CRM, or contact-centre suite) and the following APIs are designed for integration scenarios where requests need to be escalated to CSM for further follow up.
Request intake APIs provide synchronous operations for:
All request intake operations are synchronous. A successful request returns the created issue identifiers immediately, so there is no task to poll.
The external intake endpoint uses the default form configured for the Customer Experience. Client-supplied form selection is not part of this integration model.
Creates a request in CSM from an external interaction, using the default form configured for the Customer Experience. Optionally associates the end customer with the request through their email address, and records the channel the interaction arrived on.
Use Case: Open a case automatically when a call, IVR selection, or bot session needs tracking and follow-up in CSM.
Form used: Default form for the Customer Experience
Returns: 200 OK with the created issue identifiers
Adds a comment to a request that has already been created. Use this API to attach content that arrived too late for the original creation call, and to control whether that content is visible to the customer.
Use Case: Append a call transcript, agent wrap-up notes, or a post-call analysis summary to a case after the interaction ends.
Visibility: Internal by default, or customer-visible when explicitly set
Returns: 200 OK with the created comment
All request intake calls use the following base URL, with the Cloud ID of the target site:
1 2https://api.atlassian.com/jsm/csm/cloudid/{cloudId}
Third-party integrations must authenticate with an Atlassian service account using OAuth 2.0 client credentials (2LO). This is the supported method. Do not build against user session authentication or a personal account's credentials.
Create an Atlassian service account for the integration. The service account must have the Customer Service Management User role, and its credentials must:
write:csm-request:jira-service-management scope associated with themExchange the client credentials for a bearer token, then send that token on every request. There is no audience or scope parameter in this exchange; scopes come from the service account configuration.
| Identifier | Where it is used | Description |
|---|---|---|
cloudId | Base URL | Identifies the target Atlassian site. |
helpCenterId | Request body and comment path | Identifies the Customer Experience the request belongs to. |
id / key | Comment path | Returned when the request is created. Store one of these against your source-system record. |
These roles are intentionally separate in the external intake model:
reporterEmail, when provided. CSM creates or retrieves the customer accountUse intakeChannel to classify where an interaction came from. Send VOICE for telephony and contact-centre integrations. If omitted, the value defaults to EXTERNAL for backward compatibility.
Accepted values are EMAIL, AI_AGENT, SUPPORT_SITE, EXTERNAL, EMBED, VOICE, SMS, SDK, and MESSAGING. The sub-channels EMBED_CHAT, SUPPORT_SITE_CHAT, and WHATSAPP are also accepted.
Exchange the service account's client credentials for a bearer token:
1 2curl -X POST https://auth.atlassian.com/oauth/token \ -H 'Content-Type: application/json' \ -d '{ "grant_type": "client_credentials", "client_id": "YOUR_CLIENT_ID", "client_secret": "YOUR_CLIENT_SECRET" }'
1 2curl -X POST https://api.atlassian.com/jsm/csm/cloudid/YOUR_CLOUD_ID/api/v1/request/form/external \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{ "helpCenterId": "YOUR_CUSTOMER_EXPERIENCE_ID", "origin": "Salesforce Service Cloud", "summary": "Customer requested help with account access", "description": "Customer contacted the support line after failing multi-factor authentication. Agent verified identity and opened a case for follow-up.", "reporterEmail": "customer@example.com", "intakeChannel": "VOICE", "metadata": { "agentId": "agent-314", "contactId": "contact-8291", "queue": "priority-support" } }'
Response:
1 2{ "id": "10021", "key": "CSM-1", "helpCenterId": "YOUR_CUSTOMER_EXPERIENCE_ID", "link": "https://example.atlassian.net/helpcenter/12345/user/requests/CSM-1" }
Use the key returned in step 2. The comment body is Atlassian Document Format (ADF). Comments are internal unless public is set to true.
1 2curl -X POST https://api.atlassian.com/jsm/csm/cloudid/YOUR_CLOUD_ID/api/v1/request/form/helpcenter/YOUR_CUSTOMER_EXPERIENCE_ID/issue/YOUR_ISSUE_KEY/comment \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{ "public": false, "body": { "type": "doc", "version": 1, "content": [ { "type": "paragraph", "content": [ { "type": "text", "text": "Call transcript summary: customer could not access the portal after password reset. Identity verified. Escalated to account administration." } ] } ] } }'
Open a case when an interaction needs tracking beyond the call itself.
intakeChannel set to VOICEKeep the creation call small and add detail once the interaction completes.
Hand off an automated session that could not resolve the customer's problem.
reporterEmail so the case is attached to the customerCreate CSM cases from interactions that begin in your CRM.
summary, description, and flat metadata valuesorigin value so CSM traffic from this system is identifiablesummary and reserve long transcript content for commentsmetadata flat, minimal, and operationally usefulorigin value for each external systemintakeChannel explicitly rather than relying on the default400 and 403 as configuration or data problems, not transient faults5xx responses carefully, with exponential backoffx-trace-id response header on every non-2xx response and log it with your own correlation ID401 by re-authenticatingoriginbarista.form.processing.validation.errorSolution: No default form is configured for the Customer Experience. This is a configuration issue rather than a temporary fault, so the request will keep failing until a default form is in place. Confirm the default form, then retry. Match on this error key to handle the case specifically rather than treating it as a transient error.
Solution:
write:csm-request:jira-service-management scopeSolution: Validate reporterEmail before sending. Invalid email values cause the request to be rejected. If the customer's email is unavailable, omit the field; the request is still created without a customer reporter.
Solution: Only primitive JSON values are supported in metadata. Flatten nested objects and arrays into individual keys before sending.
Solution: A retry after a timeout creates a second request, because these APIs have no idempotency key. Record a "created" flag and the returned issue key against the source-system record, and check it before retrying.
Solution: The customer is attached through reporterEmail only. The service account is always the creator, and this is expected behaviour. Supply reporterEmail if the case should be associated with the end customer.
For support with request intake APIs:
x-trace-id from the failing response and a sample payloadRate this page: