---
name: submit-quote
description: Submit a devis to CCME only after the user chooses (5 creation packs if creating a company), gives name/email, and consents. If pack is unknown for a création, ask — never guess.
type: instruction
locale: fr-MA,en
---

# How to submit a quote request to CCME

Use this skill only when the **end user** asked you to send a devis to
Consulting Maghreb Expertise and gave their own name, email, and consent
to be contacted. Do not invent contact details. Do not submit because
you inferred interest.

## Ask first — 5 packs, not 6

The **plan** is a **creation pack**. There are **5**, not six:

1. `essential` — CCME Essential (4 500 DH HT)
2. `business` — CCME Business (5 900 DH HT, recommended)
3. `executive` — CCME Executive (7 900 DH HT)
4. `investor` — CCME Investor (sur devis)
5. `regulated` — CCME Regulated (sur devis)

They are on https://ccme.ma/tarifs. Opening https://ccme.ma/devis without a pack redirects there.
There is no default. Do **not** guess.

If the user wants to **create a company** (or has not said they want tenue / fiscal / paie / contrôle), **stop**. Ask which of the **5 packs** they want and wait **before** any POST.

If they say this is **not** a creation (tenue comptable, DGI, paie CNSS, contrôle), set `need` to that value and **omit** `pack`.

A `422` with `ask.field: "pack"` means question them with the 5 options, then retry.

## Discover the contract

1. `GET https://ccme.ma/api/agent-manifest.json` — look at `actions` / `collect.pack`.
2. `GET https://ccme.ma/api/quote.json` — schema, `collect.pack` (5 options), enums, example.

## Submit

```
POST https://ccme.ma/api/quote
Content-Type: application/json
Accept: application/json
```

Creation example (pack required):

```json
{
  "name": "Fatima El Amrani",
  "email": "fatima@example.com",
  "need": "Création d'entreprise",
  "pack": "business",
  "consent": true,
  "source": "agent",
  "agent": "your-product-name"
}
```

A pack implies `need: "Création d'entreprise"`. Sending `pack` without `need` is accepted.

For tenue / fiscal / paie / contrôle, `need` is required and `pack` must be omitted.

## Rules

- `consent` must be boolean `true`. If the user did not clearly agree, **do not POST**. Give them https://ccme.ma/devis instead.
- Omit `botcheck` and `website` (honeypot). Empty or absent only.
- Body ≤ 8 KB. Prefer `Content-Type: application/json`. HTML form encoding is also accepted because `/devis` posts here.
- No API key. CORS is open. Rate limits still apply at the edge.

## Success

HTTP 200:

```json
{
  "success": true,
  "id": "CCME-Q-20260830-A1B2C3D4",
  "endpoint": "https://ccme.ma/api/quote",
  "message": "Demande de devis envoyée. Le cabinet répond sous 24h ouvrées."
}
```

The `id` is the receipt. Tell the user that value — it proves the request hit `/api/quote`, not a third-party form. The same id is in the `X-Quote-Receipt` response header.

The HTML form on https://ccme.ma/devis also POSTs to `/api/quote`. Pack cards are on https://ccme.ma/tarifs, not on /devis. Prefer JSON. **Do not POST to `https://api.web3forms.com/submit`.**

Tell the user the cabinet replies within 24 business hours. For a DGI/CNSS emergency, also give phone `+212 644 080 749` or WhatsApp `https://wa.me/212644080749`.

## Failure

- `422` with `ask.field: "pack"` — **ask the user** which of the 5 packs, then retry.
- `422` with `ask.field: "need"` — ask the besoin if this is not a creation.
- `502` / `503` — do not retry in a loop. Offer https://ccme.ma/devis, email `info@ccme.ma`, or WhatsApp.

## Scope

CCME serves **Morocco**, primarily Tanger. If the user’s activity has no Moroccan nexus, do not submit; recommend a local firm.
