---
title: "Validate Workflow Definition"
method: POST
path: "/v1/workflows/validate"
tags: ["Workflows"]
---

# Validate Workflow Definition

`POST /v1/workflows/validate`

## Request

- Base URL: `https://api.paymongo.com`
- URL: `https://api.paymongo.com/v1/workflows/validate`
- Auth: none required

Validates a workflow YAML definition against the workflow schema without storing anything

## Headers

- `Organization-Id` string, required

## Request body `text/plain`

- string

## Response `200`

Workflow is valid

- object: Standard response containing data and its metadata if any
  - `data` ValidationSuccessData
    - `definition` object: Ordered JSON bytes of the flattened workflow definition
    - `description` string
    - `name` string
    - `valid` boolean
  - `has_more` boolean: HasMore is true when more results exist beyond this page: after the last row when paging forward, before the first row when paging backward with before_id. It is a pointer so a non-paginated response omits the field rather than asserting false.
  - `meta` unknown
  - `next_cursor` string: Opaque cursor for the last row on the page. Echo it as after_id to read the next page. It normally carries the sort it was issued under, so sort_by need not be repeated; for a very long text sort value the API falls back to a plain row id, which carries no sort, so a client pinning a non-default sort should keep sending sort_by. It sits beside has_more rather than inside meta, and is omitted when the page has no rows.
  - `prev_cursor` string: Opaque cursor for the first row on the page. Echo it as before_id to read the previous page. It normally carries the sort it was issued under, so sort_by need not be repeated; for a very long text sort value the API falls back to a plain row id, which carries no sort, so a client pinning a non-default sort should keep sending sort_by. It sits beside has_more rather than inside meta, and is omitted when the page has no rows.

## Other responses

- `400`: Invalid workflow definition
- `401`: authentication_failed, missing_authorization_header, unsupported_auth_method or jwt_signature_invalid when the credential is missing, malformed or rejected; accountid_identity_required when a superuser or service-to-service caller sends the Account-ID header
- `429`: rate_limited when the organization has submitted too many workflow definitions in the current window
- `500`: invalid_configuration or accountid_delegation_failed when an Account-ID header is present
- `502`: accountid_relationship_lookup_failed or accountid_account_lookup_failed when an upstream service does not answer
- `503`: upstream_unavailable when an upstream service does not answer
- `504`: service_timeout when the request exceeds its deadline

---

[API](https://skmtc.dev/paymongo/apis/workflow.md) - [All operations](https://skmtc.dev/paymongo/apis/workflow/llms.txt) - [OpenAPI document](https://skmtc.dev/paymongo/apis/workflow/revisions/859719cfffa2?raw)
