> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Validate Report

> Check the report against the obligatory goAML header fields (reporting entity ID, submission code, local currency, action taken, submission date), plus at least one attached transaction and a 2-letter jurisdiction, without generating any files. Also stores the result on the report: validation_errors and validated_at are updated, and a non-finalized report's status moves to VALIDATED (no errors) or back to DRAFT (errors).

export const AgentPromptAccordion = ({prompt, title = "AI Agent Integration Prompt"}) => {
  const [copied, setCopied] = React.useState(false);
  const handleCopy = e => {
    e.stopPropagation();
    if (!prompt) return;
    navigator.clipboard.writeText(prompt.trim()).then(() => {
      setCopied(true);
      setTimeout(() => setCopied(false), 2000);
    });
  };
  const agents = ["Claude Code", "Codex", "Cursor", "Devin", "Windsurf", "GitHub Copilot"];
  return <div className="didit-agent-card">
      {}
      <div className="didit-agent-titlebar">
        <div className="didit-agent-dots" aria-hidden="true">
          <span className="didit-agent-dot didit-agent-dot-red"></span>
          <span className="didit-agent-dot didit-agent-dot-yellow"></span>
          <span className="didit-agent-dot didit-agent-dot-green"></span>
        </div>
        <span className="didit-agent-filename">{title}</span>
        <button type="button" className={`didit-agent-copy ${copied ? "didit-agent-copy-copied" : ""}`} onClick={handleCopy} title="Copy prompt to clipboard" aria-label={copied ? "Copied!" : "Copy prompt to clipboard"}>
          {copied ? <>
              <svg width="13" height="13" viewBox="0 0 16 16" fill="none">
                <path d="M3 8.5l3.5 3.5L13 4" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
              </svg>
              <span>Copied</span>
            </> : <>
              <svg width="13" height="13" viewBox="0 0 16 16" fill="none">
                <rect x="5" y="5" width="9" height="9" rx="1.5" stroke="currentColor" strokeWidth="1.5" />
                <path d="M11 5V3.5A1.5 1.5 0 0 0 9.5 2h-6A1.5 1.5 0 0 0 2 3.5v6A1.5 1.5 0 0 0 3.5 11H5" stroke="currentColor" strokeWidth="1.5" />
              </svg>
              <span>Copy</span>
            </>}
        </button>
      </div>

      {}
      <pre className="didit-agent-body"><code>{prompt.trim()}</code></pre>

      {}
      <div className="didit-agent-footer">
        <span className="didit-agent-footer-label">Paste into</span>
        <div className="didit-agent-chips">
          {agents.map(name => <span key={name} className="didit-agent-chip">{name}</span>)}
        </div>
      </div>
    </div>;
};

<AgentPromptAccordion
  title="Validate Report API Prompt"
  prompt={`Validate a FIU report through the Management API without finalizing it.

Endpoint:
POST https://verification.didit.me/v3/organization/{organization_id}/application/{application_id}/regulatory-reports/{report_uuid}/validate/

Authentication:
Use the x-api-key header with my Didit API key.

Goal:
- Check the report against the obligatory goAML header fields (reporting entity ID, submission code, local currency, action taken, submission date), plus at least one attached transaction and a 2-letter jurisdiction, without generating any files. Use this to show inline validation errors before the officer commits to finalizing.

Example call:
curl -X POST "https://verification.didit.me/v3/organization/{organization_id}/application/{application_id}/regulatory-reports/{report_uuid}/validate/" \\
-H "x-api-key: YOUR_API_KEY"

Response 200:
{
"status": "DRAFT",
"is_valid": false,
"errors": [
{"field": "rentity_id", "message": "Reporting entity ID is required."},
{"field": "submission_date", "message": "Submission date is required."}
]
}
errors is an array of {field, message} objects (empty when valid).

Failure modes:
- 401/403 - auth/permission errors (requires write:cases).
- 404 - report not found.

Side effects: updates the report's validation_errors and validated_at, and moves a non-finalized report's status to VALIDATED (no errors) or back to DRAFT (errors). Does not generate files. Finalize does its own re-validation regardless.

For the full integration shape, see /integration/integration-prompt.`}
/>

Dry-run validation against the obligatory goAML fields, without generating XML or PDF. [Finalize](/management-api/regulatory-reports/finalize) re-validates internally, so calling this first is optional but useful for surfacing errors early.

## Related

* [Finalize report](/management-api/regulatory-reports/finalize)
* [Create report from case](/management-api/regulatory-reports/create-for-case)


## OpenAPI

````yaml POST /v3/organization/{organization_id}/application/{application_id}/regulatory-reports/{report_uuid}/validate/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: Identity verification API. Authenticate with x-api-key header.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/organization/{organization_id}/application/{application_id}/regulatory-reports/{report_uuid}/validate/:
    post:
      tags:
        - Regulatory Reports
      summary: Validate report
      description: >-
        Check the report against the obligatory goAML header fields (reporting
        entity ID, submission code, local currency, action taken, submission
        date), plus at least one attached transaction and a 2-letter
        jurisdiction, without generating any files. Also stores the result on
        the report: validation_errors and validated_at are updated, and a
        non-finalized report's status moves to VALIDATED (no errors) or back to
        DRAFT (errors).
      operationId: validate_regulatory_report
      parameters:
        - name: organization_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Organization UUID.
        - name: application_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Application UUID.
        - name: report_uuid
          in: path
          required: true
          schema:
            type: string
            format: uuid
            example: 5ec00000-0000-4000-8000-000000000007
          description: Report UUID.
      responses:
        '200':
          description: Validation result.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    enum:
                      - DRAFT
                      - VALIDATED
                      - FINALIZED
                  is_valid:
                    type: boolean
                  errors:
                    type: array
                    description: Empty when valid.
                    items:
                      type: object
                      properties:
                        field:
                          type: string
                        message:
                          type: string
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X POST
            'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/regulatory-reports/5ec00000-0000-4000-8000-000000000007/validate/'
            \
              -H 'x-api-key: YOUR_API_KEY'

````