# `api.jobs.on_hold.resolve` > `PUT /job/{jobDisplayId}/onhold/{onHoldId}/resolve` — ACPortal **Python** ```python api.jobs.on_hold.resolve(job_display_id: int, on_hold_id: str, *, data: SaveOnHoldRequest | dict) -> ResolveJobOnHoldResponse ``` **CLI** ```bash ab jobs on_hold resolve [--data ...] ``` Resolve an on-hold record. Request model: :class:`SaveOnHoldRequest` (resolve shares the same swagger schema as create/update; populate ``resolved_code_id`` and/or ``resolved_date`` to record the outcome). ## Request body — `SaveOnHoldRequest` | Field | Type | Required | Description | |---|---|---|---| | `reasonId` | `str` | yes | Hold reason UUID (required) | | `responsiblePartyTypeId` | `str` | yes | Responsible-party-type UUID (required) | | `comment` | `Optional[str]` | no | Free-text comment (<=1024 chars) | | `nextStepId` | `Optional[str]` | no | Next-step lookup UUID | | `dueDate` | `Optional[datetime]` | no | Follow-up due date | | `assignedToId` | `Optional[int]` | no | Contact ID assigned to follow up (int) | | `resolvedDate` | `Optional[datetime]` | no | Resolution timestamp | | `resolvedCodeId` | `Optional[str]` | no | Resolution code lookup UUID | | `startDate` | `Optional[datetime]` | no | Hold start timestamp | ## Response Returns `ResolveJobOnHoldResponse`. | Field | Type | Required | Description | |---|---|---|---| | `resolved` | `Optional[bool]` | no | Whether resolved successfully | | `status` | `Optional[str]` | no | Resolution status | --- [← Back to api.jobs](../jobs.md)