---
id: approval-execute
title: Execute an approved request
description: >-
  Starts the action behind an approved request (a deployment, a scope, a set of
  changes). Use it when the request is approved but the action waits for someone
  to start it. That is the case with the `explicit`
  [`execution_trigger`](/docs/approvals/checklist-specs#choose-what-starts-the-approved-action)
  of a checklist specification, and with a reviewer's approval when the trigger
  is `automatic_approval`.
sidebar_label: Execute an approved request
hide_title: true
hide_table_of_contents: true
api: >-
  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
sidebar_class_name: post api-method
info_path: docs/api/approval
custom_edit_url: null
canonical: 'https://docs.nullplatform.com/docs/api/approval-execute'
---
<Heading
  as={"h1"}
  className={"openapi__heading"}
  children={"Execute an approved request"}
>
</Heading>

<MethodEndpoint
  method={"post"}
  path={"/approval/{id}/execute"}
  context={"endpoint"}
>

</MethodEndpoint>

Starts the action behind an approved request (a deployment, a scope, a set of changes). Use it when the request is approved but the action waits for someone to start it. That is the case with the `explicit` [`execution_trigger`](/docs/approvals/checklist-specs#choose-what-starts-the-approved-action) of a checklist specification, and with a reviewer's approval when the trigger is `automatic_approval`.

Executing a request that already ran (`execution_status` is `success`), or that is being executed right now, does nothing: the call answers `200` with the request as it is, and the action isn't sent twice. A request whose execution `failed` can be executed again.

:::info
The response carries the request after the attempt. Check its `execution_status`: `success` when the action started, `failed` when it didn't.
:::

<Heading
  id={"request"}
  as={"h2"}
  className={"openapi-tabs__heading"}
  children={"Request"}
>
</Heading>

<ParamsDetails
  parameters={[{"in":"path","name":"id","schema":{"type":"integer"},"required":true,"description":"The ID of the approval.","example":1234}]}
>

</ParamsDetails>

<RequestSchema
  title={"Body"}
  body={undefined}
>

</RequestSchema>

<StatusCodes
  id={undefined}
  label={undefined}
  responses={{"200":{"description":"The request was executed, or it had already been. Read `execution_status` for the result.","content":{"application/json":{"schema":{"type":"object","required":["id","approval_action_id","entity_id","entity_name","entity_action","original_http_request","approval_http_request","denial_http_request","status","execution_status","user_id","dimensions"],"properties":{"id":{"type":"integer","description":"A unique identifier for the approval.","example":1234},"user_id":{"type":"integer","description":"The ID of the user who initiated this approval request.","example":2345},"approval_action_id":{"type":"integer","description":"The ID of the action that triggered this approval.","example":3456},"entity_id":{"type":"string","description":"The ID of the entity affected by this approval.","example":"4567"},"aggregator_entity_id":{"type":"string","nullable":true,"description":"The ID of the group entity this approval belongs to, for example the deployment group of a deployment. Null when the approval doesn't belong to a group.","example":"9012"},"nrn":{"type":"string","description":"The NRN of the resource the approval applies to.","example":"organization=1:account=2:namespace=3:application=4:scope=5"},"entity_name":{"type":"string","description":"The entity that requires approval.","enum":["deployment","scope","service:action","parameter","action_item"],"example":"deployment","title":"entity_name"},"entity_action":{"type":"string","description":"The action that requires approval.","enum":["deployment:create","scope:create","scope:recreate","scope:write","scope:delete","scope:stop","service:action:create","parameter:read-secrets","action_item:resolve","action_item:defer","action_item:reject"],"example":"deployment:create","title":"entity_action"},"original_http_request":{"type":"object","description":"The HTTP request that triggered the approval."},"approval_http_request":{"type":"object","description":"The HTTP request that must be executed to approve the action."},"denial_http_request":{"type":"object","description":"The HTTP request that must be executed to deny the action."},"mode":{"type":"string","enum":["policy","checklist"],"nullable":true,"description":"How the approval is decided: by evaluating policies or by running a checklist.","example":"checklist"},"checklist_run_id":{"type":"string","nullable":true,"description":"The ID of the checklist run that decides the approval. Null in policy mode.","example":"crun_abc123def456ghij"},"created_at":{"type":"string","format":"date-time","description":"When the approval was created.","example":"2026-08-28T14:12:03.000Z"},"status":{"type":"string","description":"The current status of the approval request.","enum":["pending","approved","auto_approved","auto_denied","denied","cancelled","expired"],"example":"pending","title":"approval_status"},"execution_status":{"type":"string","description":"The execution state of the approval action.","enum":["pending","executing","success","failed","expired"],"example":"pending"},"dimensions":{"type":"object","example":{"environment":"production","country":"us"},"description":"The set of dimension/values pairs to which this action applies."}},"title":"approval"}}}},"400":{"description":"The request can't be executed: it isn't approved, it expired, its execution window closed, or it isn't pending to execute. The detail names the reason."},"4XX":{"description":"The request couldn't be processed. For example, a parameter is invalid, the resource doesn't exist, or you don't have permission. The body is a problem details object (RFC 9457).","content":{"application/problem+json":{"schema":{"type":"object","description":"Describes what went wrong, following the RFC 9457 problem details format.","required":["type","title","status"],"properties":{"type":{"type":"string","description":"A URI that identifies the kind of problem. It's an identifier, not a link, and it's the same every time this problem occurs.","example":"urn:nullplatform:error:routes-helper:invalid-params"},"title":{"type":"string","description":"A short, human-readable summary of the problem.","example":"There are invalid parameters on the request"},"status":{"type":"integer","description":"The HTTP status code of the response.","example":400},"code":{"type":"string","description":"A stable, machine-readable error code. Use it to handle specific errors in your integrations.","example":"ROUTES_HELPER.INVALID_PARAMS"},"detail":{"type":"string","nullable":true,"description":"More information about what went wrong in this request, when available.","example":null},"errors":{"type":"array","description":"One entry per invalid field or parameter. Only present on validation errors.","items":{"type":"object","properties":{"field":{"type":"string","description":"The name of the invalid field or parameter.","example":"application_id"},"in":{"type":"string","description":"Where the field was sent: `body`, `query`, or `params` (path parameters).","example":"query"},"issue":{"type":"string","description":"What's wrong with the field, such as `required` or `invalid`.","example":"invalid"},"value":{"description":"The value that was sent, when relevant.","example":"not-a-number"},"message":{"type":"string","description":"A human-readable explanation of the issue."}}}},"message":{"type":"string","deprecated":true,"description":"Same value as `title`, kept for backward compatibility. Use `title` or `code` instead.","example":"There are invalid parameters on the request"},"traceId":{"type":"string","description":"An identifier for this request, when available. Include it when you contact nullplatform support."}}}}}},"5XX":{"description":"Something went wrong on nullplatform's side. The body is a problem details object (RFC 9457).","content":{"application/problem+json":{"schema":{"type":"object","description":"Describes what went wrong, following the RFC 9457 problem details format.","required":["type","title","status"],"properties":{"type":{"type":"string","description":"A URI that identifies the kind of problem. It's an identifier, not a link, and it's the same every time this problem occurs.","example":"about:blank"},"title":{"type":"string","description":"A short, human-readable summary of the problem.","example":"Oops.. there was an internal error"},"status":{"type":"integer","description":"The HTTP status code of the response.","example":500},"code":{"type":"string","description":"A stable, machine-readable error code. Use it to handle specific errors in your integrations."},"detail":{"type":"string","nullable":true,"description":"More information about what went wrong in this request, when available.","example":null},"message":{"type":"string","deprecated":true,"description":"Same value as `title`, kept for backward compatibility. Use `title` or `code` instead.","example":"Oops.. there was an internal error"},"traceId":{"type":"string","description":"An identifier for this request, when available. Include it when you contact nullplatform support."}}}}}}}}
>

</StatusCodes>

