Loading...
Loading...
Loading...
We use essential storage to operate Lexel Translate. With your permission, we also use analytics, advertising, and marketing technologies. Read our Cookie Policy.
Loading...
Create reusable callback profiles for async job completion delivery across personal, organization, and team scopes. Session auth only.
/api/v1/translate/webhooksList profiles with optional target, enabled, and default_only filters.
/api/v1/translate/webhooksCreate a profile.
/api/v1/translate/webhooks/:profileIdRead one profile.
/api/v1/translate/webhooks/:profileIdUpdate mutable fields.
/api/v1/translate/webhooks/:profileIdDelete a profile.
curl -X POST "https://translate.lexel.ai/api/v1/translate/webhooks" \-H "Cookie: better-auth.session_token=your_session_cookie" \-H "Content-Type: application/json" \-d '{"target": "organization","organizationId": "org_123","name": "Primary production callback","description": "Delivers async translation completions to our ingress.","callbackUrl": "https://example.com/hooks/translation-jobs","enabled": true,"isDefault": true,"metadata": {"environment": "production"}}'
| Field | Type | Required | Description |
|---|---|---|---|
| target | user | organization | team | Yes | Ownership scope for the profile. |
| organizationId | string | No | Required for organization and team targets. |
| teamId | string | No | Required for team target. |
| name | string | Yes | Human-readable profile name. |
| description | string | null | No | Optional internal description for operators. |
| callbackUrl | https URL | Yes | Completion callback destination for async jobs. |
| enabled | boolean | No | Whether this profile can be used. Defaults to true. |
| isDefault | boolean | No | Whether jobs should use this profile automatically for the scope when no callback is supplied. |
| metadata | object | No | Customer-defined JSON metadata, such as environment or owner. |
{"ok": true,"webhookProfile": {"id": "whp_123","target": "organization","organizationId": "org_123","teamId": null,"name": "Primary production callback","description": "Delivers async translation completions to our ingress.","callbackUrl": "https://example.com/hooks/translation-jobs","enabled": true,"isDefault": true,"metadata": {"environment": "production"},"createdAt": "2026-06-12T17:00:00.000Z","updatedAt": "2026-06-12T17:00:00.000Z"}}
When an async job completes, Lexel Translate POSTs a JSON body to the resolved callback URL:
{"jobId": "job_123","status": "completed","summary": {"mode": "batch","totalItems": 2,"completedItems": 2,"failedItems": 0},"result": {"ok": true,"request_id": "req_job_demo_001","output": {"kind": "batch","batch": []}}}
content-type: application/json, x-lexel-event: translation.job.completed, x-lexel-delivery-id, x-lexel-delivery-timestamp, and x-lexel-signature-sha256 when signing is configured.callbackUrl or webhookProfileId, never both. If neither is supplied, the job uses the enabled default profile for the active scope when one exists.webhookProfileId from async job creation, but they do not manage webhook profiles through API key auth.