Complete profile setup
Final step in the profile compliance workflow. Validates all prerequisites (KYC, brand, campaigns, required documents), connects the profile to the SMS and WhatsApp channels, and sets its status based on configuration. Prerequisites are always validated first: if any fail the call returns 400. If they pass and the profile is already completed, the call returns 200 and does nothing. Otherwise it returns 202 and calls the provided webhook URL when background processing finishes.
Prerequisites:
- Profile must have a name, short name, and description (short name max 50 characters, description max 5000)
- webHookUrl must be supplied on the request
- A KYC form submission is required
- A brand is required, either on the profile or inherited from the parent organization
- TCR applications must have at least one campaign, own or inherited
- Destination countries marked as main must have their required compliance documents uploaded
Resulting status:
- If either the SMS or WhatsApp channel is unconfigured, the profile is SUBMITTED
- For a TCR application that inherits both its brand and its campaigns, the profile is COMPLETED
- For a TCR application that owns either its brand or its campaigns, the profile is COMPLETED once both have been submitted to TCR, and SUBMITTED until then
- For a non-TCR application, the profile is SUBMITTED when a main destination country is set, and COMPLETED otherwise
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v3/profiles/660e8400-e29b-41d4-a716-446655440000/complete" \ -H "Idempotency-Key: req_abc123_retry1" \ -H "Content-Type: application/json" \ -d '{ "webHookUrl": "https://your-app.com/webhook/profile-complete", "sandbox": false }'{
"success": true,
"data": {
"status": "completed",
"message": "Profile is already completed"
},
"error": null,
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-08-17T13:29:05.1422088+00:00",
"version": "v3"
}
}{
"success": true,
"data": {
"message": "Profile completion in progress"
},
"error": null,
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-08-17T13:29:05.1422411+00:00",
"version": "v3"
}
}{
"success": true,
"error": {
"code": "string",
"message": "string",
"details": {
"property1": [
"string"
],
"property2": [
"string"
]
},
"doc_url": "string"
},
"meta": {
"request_id": "string",
"timestamp": "2019-08-24T14:15:22Z",
"version": "string"
}
}{
"success": true,
"error": {
"code": "string",
"message": "string",
"details": {
"property1": [
"string"
],
"property2": [
"string"
]
},
"doc_url": "string"
},
"meta": {
"request_id": "string",
"timestamp": "2019-08-24T14:15:22Z",
"version": "string"
}
}{
"success": true,
"error": {
"code": "string",
"message": "string",
"details": {
"property1": [
"string"
],
"property2": [
"string"
]
},
"doc_url": "string"
},
"meta": {
"request_id": "string",
"timestamp": "2019-08-24T14:15:22Z",
"version": "string"
}
}Delete a profile DELETE
Soft deletes a sender profile. The profile will be marked as deleted but data is retained. Requires admin role in the organization.
Get campaigns for a profile's brand GET
Retrieves all campaigns linked to the profile's brand, including use cases and sample messages. Returns inherited campaigns if inherit_tcr_campaign=true.