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

# Enviar o cadastro de uma organização

> Envia o cadastro da organização para análise.

Envia para análise o cadastro que já foi declarado na organização. Não recebe corpo: tudo o que vai para a análise foi gravado antes com [`POST /v1/organizations/{id}`](/api-reference/organizations/update).

Chame este endpoint quando `requirements.missing` estiver vazio. Enquanto faltar qualquer campo, a resposta é `400` com `code: "requirements_incomplete"` e a lista do que falta.

O envio é **assíncrono**: a resposta `200` confirma que o cadastro entrou na fila de análise (`activation_status: "in_review"`), não que foi aprovado. O resultado chega por [`organization.updated`](/api-reference/webhooks/organization.updated).

## Autenticação

| Credencial                               | Acesso                                                                                                                |
| ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| API key da plataforma (`platform_admin`) | Organizações conectadas ativas da plataforma. A organização vem do caminho; o header `Organization` não é usado aqui. |

<Note>
  O `{id}` da URL identifica a organização. Com chave de plataforma, a API confirma que esse `org_*` tem uma conexão ativa com a plataforma da chave.
</Note>

<Warning>
  Não envie o header `Organization`. Ele não participa desta operação e não corrige um `404`. Confira o ID da URL e o vínculo da organização.
</Warning>

## Parâmetros de caminho

<ParamField path="id" type="string" required>
  ID da organização (`org_*`).
</ParamField>

## Corpo da requisição

Nenhum parâmetro. Se você enviar um corpo, ele precisa ser um objeto JSON válido — o conteúdo é ignorado.

## Comportamento

* **Idempotente por estado.** Organização já `in_review` ou `active` responde `200` com o objeto atual, sem reenviar nada e sem abrir uma análise nova. Repetir a chamada por timeout é seguro.
* **Validação antes da fila.** O envio só entra na fila quando o cadastro está completo e consistente. Falta de campo vira `400 requirements_incomplete`, com `param` apontando o primeiro caminho de `requirements.missing`.
* **Reenvio após reprovação.** Em `disabled` com `requirements.disabled_reason: null`, corrija os campos apontados em `requirements.missing` com [`POST /v1/organizations/{id}`](/api-reference/organizations/update) e chame `/submit` de novo — mesma organização, mesmo `org_*`. Com `disabled_reason` preenchido não há caminho de autoatendimento; encaminhe ao suporte.
* **Modo de teste.** Funciona com credencial de teste; o desfecho é escolhido pelo CPF/CNPJ da organização. Veja a tabela em [Ativação por API](/platforms/activate-by-api#modo-de-teste).

<RequestExample>
  ```bash cURL theme={"theme":"css-variables"}
  curl -X POST "https://api.chargefy.io/v1/organizations/org_ngDATAmJHDuPMrhE/submit" \
    -H "Authorization: Bearer {{PLATFORM_API_KEY}}"
  ```
</RequestExample>

## Resposta

`200 OK` com o objeto `organization` completo. `activation_submitted_at` carimba o envio e `activation_status` passa para `in_review`.

`requirements.pending_verification` começa vazio e passa a listar o que está sendo verificado conforme a análise avança — releia a organização (ou espere o próximo `organization.updated`) para acompanhar.

<ResponseExample>
  ```json 200 theme={"theme":"css-variables"}
  {
    "id": "org_ngDATAmJHDuPMrhE",
    "object": "organization",
    "activation_status": "in_review",
    "activation_status_updated_at": null,
    "activation_submitted_at": "2026-07-23T14:02:00Z",
    "avatar_url": null,
    "billing_additional_info": null,
    "billing_address": null,
    "billing_name": null,
    "branding_settings": {
      "accent_color": null,
      "border_style": null,
      "brand_color": null,
      "font_family": null,
      "theme": null
    },
    "business_profile": {
      "annual_revenue": {
        "amount": 120000000,
        "currency": "brl"
      },
      "mcc": null,
      "url": "https://meusite.com"
    },
    "company": {
      "address": {
        "city": "São Paulo",
        "line1": "Avenida Paulista",
        "line2": "Conjunto 101",
        "neighborhood": "Bela Vista",
        "number": "1000",
        "postal_code": "01310100",
        "state": "SP"
      },
      "email": "financeiro@meusite.com",
      "name": "ACME COMERCIO LTDA",
      "opening_date": "2019-03-14",
      "phone": "11999999999",
      "trade_name": "Acme"
    },
    "created_at": "2026-07-23T14:00:00Z",
    "dashboard_settings": {
      "timezone": "America/Sao_Paulo"
    },
    "document": "12345678000190",
    "document_type": "cnpj",
    "email": "financeiro@meusite.com",
    "individual": null,
    "livemode": true,
    "metadata": {},
    "name": "Acme",
    "payout_account": null,
    "platform": "plat_R9sDsNLqVmxxeYta",
    "representative": {
      "address": {
        "city": "São Paulo",
        "line1": "Rua das Flores",
        "line2": null,
        "neighborhood": "Jardins",
        "number": "50",
        "postal_code": "01410000",
        "state": "SP"
      },
      "birthdate": "1985-06-02",
      "document": "12345678901",
      "email": "nome@email.com",
      "first_name": "Maria",
      "last_name": "Souza",
      "phone": "11988888888"
    },
    "requirements": {
      "disabled_reason": null,
      "errors": [],
      "missing": [],
      "pending_verification": []
    },
    "socials": [],
    "statement_descriptor": "ACME",
    "terms_acceptance": {
      "accepted_at": "2026-07-23T13:58:12Z",
      "ip": "203.0.113.10",
      "user_agent": "Mozilla/5.0"
    },
    "updated_at": "2026-07-23T14:02:00Z",
    "website": null
  }
  ```

  ```json 400 requirements_incomplete theme={"theme":"css-variables"}
  {
    "error": {
      "code": "requirements_incomplete",
      "message": "Missing required fields: payout_account, representative.verification.selfie.",
      "param": "payout_account",
      "type": "invalid_request_error"
    }
  }
  ```

  ```json 400 invalid_request theme={"theme":"css-variables"}
  {
    "error": {
      "code": "invalid_request",
      "message": "RG verification requires both the front and the back photos. Upload the back of the document before submitting.",
      "type": "invalid_request_error"
    }
  }
  ```

  ```json 401 theme={"theme":"css-variables"}
  {
    "error": {
      "code": "authentication_failed",
      "message": "Unauthorized — invalid api key",
      "type": "authentication_error"
    }
  }
  ```

  ```json 404 theme={"theme":"css-variables"}
  {
    "error": {
      "code": "resource_missing",
      "message": "Organization not found",
      "type": "invalid_request_error"
    }
  }
  ```
</ResponseExample>

## Erros

| HTTP  | `code`                    | Quando acontece                                                                                                                                     | O que fazer                               |
| ----- | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- |
| `400` | `requirements_incomplete` | Ainda falta campo obrigatório. `param` traz o primeiro caminho de `requirements.missing` e `message` lista todos.                                   | Preencha os campos e chame de novo.       |
| `400` | `invalid_request`         | O cadastro está completo mas inconsistente: endereço incompleto, arquivo de verificação apagado, verso do RG ausente, conta para saques malformada. | Regrave o bloco apontado na mensagem.     |
| `401` | `authentication_failed`   | Credencial ausente, inválida, revogada ou expirada.                                                                                                 | Revise a credencial.                      |
| `403` | `permission_denied`       | Credencial sem permissão de administrar a organização.                                                                                              | Use uma credencial com escopo de escrita. |
| `404` | `resource_missing`        | Organização inexistente, apagada ou sem vínculo ativo com a plataforma.                                                                             | Confira o `org_*`.                        |
| `503` | `internal_error`          | Erro temporário ao enfileirar o envio; nada foi enviado.                                                                                            | Repita a chamada em alguns segundos.      |

<Tip>
  Antes de enviar, faça `GET /v1/organizations/{id}` e confirme que `requirements.missing` está vazio. Depois do `200`, acompanhe `organization.updated`; não trate a resposta do submit como aprovação.
</Tip>

## Acompanhando o resultado

A análise é assíncrona. O veredito chega por [`organization.updated`](/api-reference/webhooks/organization.updated):

* **Aprovado** → `activation_status: "active"` e `requirements` todo vazio.
* **Reprovado** → `activation_status: "disabled"`, `requirements.errors` com o motivo e `requirements.missing` com o que dá para corrigir.
* **Falha do envio** → a organização volta para `not_submitted`, `activation_submitted_at` volta para `null` e `requirements.errors` explica o que impediu o envio. Corrija e chame `/submit` de novo.

O passo a passo completo está em [Ativação por API](/platforms/activate-by-api); a leitura de `requirements` está em [Requisitos de ativação](/platforms/resolve-activation-rejections).
