{
  "item": [
    {
      "id": "4f209dc6-344b-4482-8508-5c785f66f752",
      "name": "Me",
      "description": {
        "content": "Whoami endpoint to confirm an API key works",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "d4b0a71e-03d6-478c-a8dd-727ad238f87a",
          "name": "Confirm an API key works",
          "request": {
            "name": "Confirm an API key works",
            "description": {
              "content": "Minimal whoami endpoint — returns details about the key that authenticates the request\n(name, scopes, inferred preset, expiration, rate limits, client). It's the simplest\nway to confirm that a third-party integration is connected. No mutations, no side\neffects — safe to call from any smoke test script.\n\nNo specific scope is required; any authenticated, active key can call this\nendpoint. Each call consumes 1 unit of the per-key rate limit (so a script stuck in\na loop can't flood the tracking).\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "me"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "16c53a76-8298-4d3e-8325-cdf37db8724d",
              "name": "Valid key.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "me"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"key_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"key_name\": \"Acme production\",\n    \"key_prefix\": \"cap_live_a1b2c3\",\n    \"key_format_version\": 2,\n    \"client_id\": \"0a1b2c3d-4e5f-6a7b-8c9d-0e1f2a3b4c5d\",\n    \"client_name\": \"Acme Corp.\",\n    \"scopes\": [\n      \"leads:capture\"\n    ],\n    \"preset\": \"lead_capture\",\n    \"lifecycle_state\": \"active\",\n    \"created_at\": \"2026-04-01T10:00:00.000Z\",\n    \"last_used_at\": \"2026-05-04T14:23:11.000Z\",\n    \"expires_at\": null,\n    \"rate_limits\": {\n      \"per_hour\": 100\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "c2a6502a-bac2-46b8-8185-fe69d295f70a",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "me"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "37f5c8fe-bac2-42cd-b1cc-d31b3d30951a",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "me"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b99a4559-13aa-485f-84d0-becab269b61f",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "me"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "66275f40-8a11-4f5a-8f1e-9c931ef0eb56",
      "name": "Usage",
      "description": {
        "content": "Programmatic usage metrics",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "51c06a73-da04-433b-a034-1fb403d1e0c6",
          "name": "Read aggregated usage for the authenticated API key",
          "request": {
            "name": "Read aggregated usage for the authenticated API key",
            "description": {
              "content": "Returns the aggregation buckets (hourly or daily) of the authenticated key's\nusage over a given time range, plus totals computed application-side. Use it to\nsize your usage, monitor latencies, and spot rate limit rejections.\n\nNo specific scope is required (same pattern as GitHub's `/rate_limit`): reading\nyour own metrics is free and always allowed for any authenticated key.\n\nThe range `(to - from)` must be strictly positive and must not exceed\n**90 days**. Returned buckets are sorted by `bucket_start ASC`; windows with no\ntraffic are omitted from the array (no zero-padding).\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "usage"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "from",
                  "value": "<dateTime>",
                  "description": "(Required) Lower bound (inclusive) of the time range, ISO 8601 UTC.\n"
                },
                {
                  "disabled": false,
                  "key": "to",
                  "value": "<dateTime>",
                  "description": "(Required) Upper bound (exclusive) of the time range, ISO 8601 UTC. Must be\nstrictly after `from`, and the range `(to - from)` must be ≤ 90 days.\n"
                },
                {
                  "disabled": false,
                  "key": "granularity",
                  "value": "day",
                  "description": "Granularity of the returned buckets. Defaults to `day`.\n"
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "f32e31d3-a043-4921-b04d-915659a76929",
              "name": "Usage buckets and totals for the requested range.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "usage"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "from",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "to",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "granularity",
                      "value": "day"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"api_key_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"from\": \"2026-05-01T00:00:00.000Z\",\n    \"to\": \"2026-05-04T00:00:00.000Z\",\n    \"granularity\": \"day\",\n    \"buckets\": [\n      {\n        \"bucket_start\": \"2026-05-01T00:00:00.000Z\",\n        \"request_count\": 1239,\n        \"status_2xx\": 1200,\n        \"status_4xx\": 30,\n        \"status_5xx\": 4,\n        \"rate_limited_count\": 5,\n        \"status_unknown\": 0,\n        \"latency_p50_ms\": 42.5,\n        \"latency_p95_ms\": 180,\n        \"latency_p99_ms\": 350\n      }\n    ],\n    \"totals\": {\n      \"request_count\": 1239,\n      \"status_2xx\": 1200,\n      \"status_4xx\": 30,\n      \"status_5xx\": 4,\n      \"rate_limited_count\": 5,\n      \"status_unknown\": 0\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "97dc0915-0f34-4867-ae2f-229fdd22a950",
              "name": "The request is malformed (missing header, invalid JSON, invalid parameter).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "usage"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "from",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "to",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "granularity",
                      "value": "day"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_request\",\n    \"message\": \"Le paramètre 'cursor' est invalide ou expiré.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#invalid_request\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"field\": \"cursor\",\n      \"reason\": \"malformed_base64\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f5aa3fd6-cd92-48d0-a26a-667aa6741c7f",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "usage"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "from",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "to",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "granularity",
                      "value": "day"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "59b95c78-2f9e-4953-868e-d3c432a5084e",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "usage"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "from",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "to",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "granularity",
                      "value": "day"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "718270d9-354f-472c-be61-8fa6be64b4d5",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "usage"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "from",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "to",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "granularity",
                      "value": "day"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "a0d34393-32f4-4b4f-be50-3a6f1542c444",
      "name": "Leads",
      "description": {
        "content": "Lead capture from external funnels (Make, Zapier, custom code)",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "ea10eb56-8a09-4866-a8ed-28b8a0984abf",
          "name": "Capture a lead from an external funnel",
          "request": {
            "name": "Capture a lead from an external funnel",
            "description": {
              "content": "Captures a new lead in Capturia from a third-party funnel, form, or tool\n(Make, Zapier, n8n, custom landing page). Once captured, the lead shows up\nimmediately in **My Prospects** in the dashboard, and the SMS bot takes\nover within 30 seconds if consent and configuration are in\norder.\n\n### Contact already known (email or phone)\nThe contact is resolved by **email first** (case-insensitive),\nthen by **phone**, including secondary contact details already\nattached to a contact. Capturing a lead whose email or phone\nalready exists **reuses and enriches the existing contact** — the\nreturned `contact_id` is that contact's, never a duplicate and\nnever an error. Contact details and core fields that are already filled\nin (name, email, phone, pipeline, value, address...) are not\noverwritten; qualification answers (`custom_fields`), on the other\nhand, are refreshed with the latest values sent — a key that is\nalready present is replaced, a new key is added. A new\nphone number is kept as a secondary number when the contact already\nhas one. If the email and the phone point to two different\ncontacts, the email takes priority and no contact detail is removed\nfrom the other contact.\n\nThe response exposes `contact_was_new` to tell the two outcomes apart:\non an existing contact (`false`), `pipeline` and `assignment_status`\ndescribe the resolved request, not necessarily the persisted state — the\ncontact keeps the pipeline, stage, and sales rep it already has, and\n`ignored_fields` names the fields of the `pipeline` block it did\nnot take (`existing_contact_kept`).\n\n### Received fields not applied (`ignored_fields`)\nA capture that responds 200 tells you what it did not apply. The response\ncarries `ignored_fields`, a `[{ field, reason }]` list that is always\npresent and empty when everything was applied:\n\n- `unknown_field` — a name the API does not know, at the root, in\n  `customData`, or in a block (`pipeline.id`, `utm.utm_source`);\n- `custom_field_not_defined` — a `custom_fields` key with no\n  definition of the same name in the account;\n- `reserved_tag` — a tag with a reserved name (`tags[1]`);\n- `system_not_active` — a `system_id` that is not active;\n- `existing_contact_kept` — a field of the `pipeline` block that the\n  existing contact kept;\n- `sales_rep_not_found` — a sales rep email that matches no\n  active member of the account;\n- `submission_not_recorded` — what only applies with a\n  recorded submission, when none is recorded\n  (`existing_pipeline_contact`, `idempotent_replay`);\n- `duplicate_field` — a copy of a field received from several sources,\n  set aside in favor of another value.\n\nOnly limit: on an existing contact, identity and address fields that\nare already filled in, and ad attribution that is already set\n(first-touch rule), are kept without being named one by one\n(`contact_was_new: false` signals it).\n\nThe lead is captured in all of these cases: this is a setup warning\nto read on the first test of an integration. The list is\ncapped at 50 entries (`ignored_fields_truncated`), with fields you mapped\nby hand listed before the ones a connector adds automatically.\n\n### Pipeline and stage\nThe `pipeline` block designates the pipeline and the stage by their text\nidentifier (`pipeline_slug`, `stage_slug`), which you copy from the dashboard:\nAdministration, API Keys, \"Your pipeline and stage identifiers\"\nsection. A connector that only sends key/value pairs\n(GoHighLevel workflow, Zapier) sends them flat:\n`pipeline.pipeline_slug`, `pipeline.stage_slug`. Without\n`pipeline_slug`, the stage is looked up in the default pipeline.\n\n### Contact already in an open pipeline\nA lead whose contact (resolved by email or phone) is already in\nan open pipeline stage (already handled by a sales rep — not\narchived, stage neither won nor lost)\nis not resubmitted: the response returns `status: existing_pipeline_contact`,\nno new submission is recorded, and the SMS bot is not\ntriggered again, so an ongoing conversation is not overwritten. Newly\nprovided core fields still enrich the existing contact.\n\nRetry deduplication takes precedence: a re-push received within the\n5-minute window is treated as a retry (`status: idempotent_replay`, see\nIdempotency) and keeps the original `activity_id` and\n`original_created_at` — `existing_pipeline_contact` only applies after this\nwindow.\n\n### Idempotency\nThe `Idempotency-Key` header is **optional but recommended** for client-side\nretries. A second request with the same key and the same payload returns the\noriginal response without duplicating the lead. The key is stored for 24h. A second\nrequest with the same key but a different payload returns 409\n`idempotency_conflict`. The underlying RPC also keeps its own\n5-minute dedup window. This window is **per contact and\nindependent of content**: any submission for a contact already captured\nwithin the last 5 minutes is treated as a retry\n(`idempotent_replay`) even if the payload differs — the contact is still\nenriched (including `custom_fields`, which are refreshed), but no\nnew activity, no tag, and no SMS bot follow-up. Updates to the\ncontact remain real: an automation that watches a\ncustom field reacts to the value change, as it does for any\nchange to the contact. This is also what prevents a double\nbot follow-up when a lead resubmits their form twice in a row.\nA different `Idempotency-Key` does not bypass this window: it\napplies in the database after any cache miss. Two intentionally\ndistinct submissions from the same contact only produce two activities\nif they are more than 5 minutes apart.\n\n### Custom error codes\nFor historical reasons, some rejections return codes outside the\nstandard catalog:\n\n- **422** — `invalid_phone`, `missing_consent`, `invalid_email`,\n  `invalid_payload`, `pipeline_not_found`, `stage_not_found` (instead of\n  `validation_error` / `business_rule_violation`). Simplified body shape\n  specific to this route — see the 422 response below.\n- **429** — `rate_limited_ip` when the IP limit (100 req/min) is reached\n  (instead of `rate_limit_exceeded`). The `X-RateLimit-Scope: ip` header\n  identifies the scope of the triggered limit. Simplified body shape (no\n  standard `request_id` or `details`) — to be aligned in a later\n  phase.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "leads",
                "capture"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                "key": "Idempotency-Key",
                "value": "<string>"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"phone\": \"<string>\",\n  \"sms_consent\": \"<boolean>\",\n  \"first_name\": \"<string>\",\n  \"last_name\": \"<string>\",\n  \"email\": \"<email>\",\n  \"source_label\": \"<string>\",\n  \"utm\": {\n    \"source\": \"<string>\",\n    \"medium\": \"<string>\",\n    \"campaign\": \"<string>\",\n    \"content\": \"<string>\",\n    \"term\": \"<string>\",\n    \"key_0\": false,\n    \"key_1\": true\n  },\n  \"gclid\": \"<string>\",\n  \"notes\": \"<string>\",\n  \"tags\": [\n    \"<string>\",\n    \"<string>\"\n  ],\n  \"qualification_answers\": [\n    {\n      \"question\": \"<string>\",\n      \"answer\": \"<string>\"\n    },\n    {\n      \"question\": \"<string>\",\n      \"answer\": \"<string>\"\n    }\n  ],\n  \"pipeline\": {\n    \"pipeline_slug\": \"<string>\",\n    \"stage_slug\": \"<string>\",\n    \"deal_value\": \"<number>\",\n    \"expected_close_date\": \"<string>\",\n    \"assigned_sales_rep_email\": \"<email>\",\n    \"key_0\": 4090\n  },\n  \"custom_fields\": {\n    \"key_0\": \"<string,number,boolean>\",\n    \"key_1\": \"<string,number,boolean>\",\n    \"key_2\": \"<string,number,boolean>\",\n    \"key_3\": \"<string,number,boolean>\",\n    \"key_4\": \"<string,number,boolean>\",\n    \"key_5\": \"<string,number,boolean>\",\n    \"key_6\": \"<string,number,boolean>\",\n    \"key_7\": \"<string,number,boolean>\",\n    \"key_8\": \"<string,number,boolean>\",\n    \"key_9\": \"<string,number,boolean>\",\n    \"key_10\": \"<string,number,boolean>\",\n    \"key_11\": \"<string,number,boolean>\",\n    \"key_12\": \"<string,number,boolean>\",\n    \"key_13\": \"<string,number,boolean>\",\n    \"key_14\": \"<string,number,boolean>\",\n    \"key_15\": \"<string,number,boolean>\",\n    \"key_16\": \"<string,number,boolean>\",\n    \"key_17\": \"<string,number,boolean>\",\n    \"key_18\": \"<string,number,boolean>\",\n    \"key_19\": \"<string,number,boolean>\",\n    \"key_20\": \"<string,number,boolean>\",\n    \"key_21\": \"<string,number,boolean>\",\n    \"key_22\": \"<string,number,boolean>\",\n    \"key_23\": \"<string,number,boolean>\",\n    \"key_24\": \"<string,number,boolean>\"\n  },\n  \"address\": \"<string>\",\n  \"postal_code\": \"<string>\",\n  \"address_place_id\": \"<string>\",\n  \"street\": \"<string>\",\n  \"city\": \"<string>\",\n  \"sector\": \"<string>\",\n  \"province\": \"<string>\",\n  \"country\": \"<string>\",\n  \"meta\": {\n    \"fbc\": \"<string>\",\n    \"fbp\": \"<string>\",\n    \"fbclid\": \"<string>\",\n    \"event_source_url\": \"<string>\",\n    \"client_ip_address\": \"<string>\",\n    \"client_user_agent\": \"<string>\",\n    \"ad_id\": \"<string>\",\n    \"adset_id\": \"<string>\",\n    \"campaign_id\": \"<string>\",\n    \"ad_name\": \"<string>\",\n    \"campaign_name\": \"<string>\",\n    \"ads_consent\": \"<boolean>\",\n    \"key_0\": 8139.829013265315,\n    \"key_1\": 7337.571347491146,\n    \"key_2\": 1731.3456267111449,\n    \"key_3\": 4665\n  },\n  \"system_id\": \"<uuid>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "72211555-68ef-4d98-9171-82ace390485f",
              "name": "Lead captured (`status: created`), idempotent replay of a previous\ncapture (`status: idempotent_replay`), or contact already\nhandled (`status: existing_pipeline_contact` — already in an open\npipeline stage: no new submission is recorded, the\nSMS bot is not triggered, and `activity_id` is `null`). In all\ncases, the returned `contact_id` is stable.\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "leads",
                    "capture"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"phone\": \"+15145551234\",\n  \"sms_consent\": true,\n  \"first_name\": \"Alex\",\n  \"last_name\": \"Tremblay\",\n  \"email\": \"alex@example.com\",\n  \"source_label\": \"funnel-fb-jan\",\n  \"utm\": {\n    \"source\": \"facebook\",\n    \"medium\": \"cpc\",\n    \"campaign\": \"spring-2026\"\n  },\n  \"tags\": [\n    \"lead-chaud\",\n    \"vu-webinaire\"\n  ],\n  \"pipeline\": {\n    \"pipeline_slug\": \"ventes-b2b\",\n    \"stage_slug\": \"nouveau-lead\",\n    \"deal_value\": 2500,\n    \"expected_close_date\": \"2026-06-30\",\n    \"assigned_sales_rep_email\": \"vendeur@example.com\"\n  },\n  \"custom_fields\": {\n    \"type_propriete\": \"maison_isolee\",\n    \"delai_vente\": \"0_3_mois\"\n  },\n  \"address\": \"123 rue Principale, Montréal\",\n  \"postal_code\": \"H2X 1Y4\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"created\",\n  \"contact_id\": \"0a1b2c3d-4e5f-6a7b-8c9d-0e1f2a3b4c5d\",\n  \"activity_id\": \"1b2c3d4e-5f6a-7b8c-9d0e-1f2a3b4c5d6e\",\n  \"sms_conversation_id\": null,\n  \"pipeline\": {\n    \"pipeline_id\": \"3d4e5f6a-7b8c-9d0e-1f2a-3b4c5d6e7f80\",\n    \"pipeline_name\": \"Ventes B2B\",\n    \"stage_id\": \"4e5f6a7b-8c9d-0e1f-2a3b-4c5d6e7f8091\",\n    \"stage_name\": \"Nouveau lead\"\n  },\n  \"original_created_at\": null,\n  \"assignment_status\": \"assigned\",\n  \"contact_was_new\": true,\n  \"ignored_fields\": [],\n  \"ignored_fields_truncated\": false,\n  \"message\": \"Lead captured. The SMS bot will take over within 30 seconds if consent and configuration are in order.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "65021d76-7f35-43cb-8f97-3f45cf675bed",
              "name": "The request is malformed (missing header, invalid JSON, invalid parameter).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "leads",
                    "capture"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"phone\": \"+15145551234\",\n  \"sms_consent\": true,\n  \"first_name\": \"Alex\",\n  \"last_name\": \"Tremblay\",\n  \"email\": \"alex@example.com\",\n  \"source_label\": \"funnel-fb-jan\",\n  \"utm\": {\n    \"source\": \"facebook\",\n    \"medium\": \"cpc\",\n    \"campaign\": \"spring-2026\"\n  },\n  \"tags\": [\n    \"lead-chaud\",\n    \"vu-webinaire\"\n  ],\n  \"pipeline\": {\n    \"pipeline_slug\": \"ventes-b2b\",\n    \"stage_slug\": \"nouveau-lead\",\n    \"deal_value\": 2500,\n    \"expected_close_date\": \"2026-06-30\",\n    \"assigned_sales_rep_email\": \"vendeur@example.com\"\n  },\n  \"custom_fields\": {\n    \"type_propriete\": \"maison_isolee\",\n    \"delai_vente\": \"0_3_mois\"\n  },\n  \"address\": \"123 rue Principale, Montréal\",\n  \"postal_code\": \"H2X 1Y4\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_request\",\n    \"message\": \"Le paramètre 'cursor' est invalide ou expiré.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#invalid_request\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"field\": \"cursor\",\n      \"reason\": \"malformed_base64\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "aa3a45cc-d0e2-43af-a556-ebac215b6b8a",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "leads",
                    "capture"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"phone\": \"+15145551234\",\n  \"sms_consent\": true,\n  \"first_name\": \"Alex\",\n  \"last_name\": \"Tremblay\",\n  \"email\": \"alex@example.com\",\n  \"source_label\": \"funnel-fb-jan\",\n  \"utm\": {\n    \"source\": \"facebook\",\n    \"medium\": \"cpc\",\n    \"campaign\": \"spring-2026\"\n  },\n  \"tags\": [\n    \"lead-chaud\",\n    \"vu-webinaire\"\n  ],\n  \"pipeline\": {\n    \"pipeline_slug\": \"ventes-b2b\",\n    \"stage_slug\": \"nouveau-lead\",\n    \"deal_value\": 2500,\n    \"expected_close_date\": \"2026-06-30\",\n    \"assigned_sales_rep_email\": \"vendeur@example.com\"\n  },\n  \"custom_fields\": {\n    \"type_propriete\": \"maison_isolee\",\n    \"delai_vente\": \"0_3_mois\"\n  },\n  \"address\": \"123 rue Principale, Montréal\",\n  \"postal_code\": \"H2X 1Y4\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "728fe92c-8cb1-4a26-b6cf-753dcb0e218e",
              "name": "Key without the `leads:capture` scope (`insufficient_scope`), or\nan organization that has not yet accepted the API terms of\nuse (`terms_acceptance_required`). Standard error\nenvelope.\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "leads",
                    "capture"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"phone\": \"+15145551234\",\n  \"sms_consent\": true,\n  \"first_name\": \"Alex\",\n  \"last_name\": \"Tremblay\",\n  \"email\": \"alex@example.com\",\n  \"source_label\": \"funnel-fb-jan\",\n  \"utm\": {\n    \"source\": \"facebook\",\n    \"medium\": \"cpc\",\n    \"campaign\": \"spring-2026\"\n  },\n  \"tags\": [\n    \"lead-chaud\",\n    \"vu-webinaire\"\n  ],\n  \"pipeline\": {\n    \"pipeline_slug\": \"ventes-b2b\",\n    \"stage_slug\": \"nouveau-lead\",\n    \"deal_value\": 2500,\n    \"expected_close_date\": \"2026-06-30\",\n    \"assigned_sales_rep_email\": \"vendeur@example.com\"\n  },\n  \"custom_fields\": {\n    \"type_propriete\": \"maison_isolee\",\n    \"delai_vente\": \"0_3_mois\"\n  },\n  \"address\": \"123 rue Principale, Montréal\",\n  \"postal_code\": \"H2X 1Y4\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"terms_acceptance_required\",\n    \"message\": \"L'organisation doit accepter les conditions d'utilisation de l'API avant de l'utiliser.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#terms\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "bf57f058-e703-4620-b171-89f7cbf654bf",
              "name": "A previous request with the same `Idempotency-Key` used a different payload,\nor is still being processed.\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "leads",
                    "capture"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"phone\": \"+15145551234\",\n  \"sms_consent\": true,\n  \"first_name\": \"Alex\",\n  \"last_name\": \"Tremblay\",\n  \"email\": \"alex@example.com\",\n  \"source_label\": \"funnel-fb-jan\",\n  \"utm\": {\n    \"source\": \"facebook\",\n    \"medium\": \"cpc\",\n    \"campaign\": \"spring-2026\"\n  },\n  \"tags\": [\n    \"lead-chaud\",\n    \"vu-webinaire\"\n  ],\n  \"pipeline\": {\n    \"pipeline_slug\": \"ventes-b2b\",\n    \"stage_slug\": \"nouveau-lead\",\n    \"deal_value\": 2500,\n    \"expected_close_date\": \"2026-06-30\",\n    \"assigned_sales_rep_email\": \"vendeur@example.com\"\n  },\n  \"custom_fields\": {\n    \"type_propriete\": \"maison_isolee\",\n    \"delai_vente\": \"0_3_mois\"\n  },\n  \"address\": \"123 rue Principale, Montréal\",\n  \"postal_code\": \"H2X 1Y4\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"idempotency_error\",\n    \"code\": \"idempotency_conflict\",\n    \"message\": \"Une requête avec cette Idempotency-Key existe avec un payload différent.\",\n    \"hint\": \"Utilise une nouvelle Idempotency-Key, ou rejoue la requête originale à l'identique.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/conventions#idempotency\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"idempotency_key\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n      \"original_request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T6\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "37b42de6-9d3f-42fd-9753-099fc3b33790",
              "name": "Payload rejected by validation (`invalid_phone`, `missing_consent`,\n`invalid_email`, `invalid_payload`) or by pipeline resolution\n(`pipeline_not_found`, `stage_not_found`). Simplified shape specific to\nthis route: no `type` or `doc_url`, and `details` is an\narray `[{ field, reason }]` (`field` is empty when the body is not\nan object). Only `system_not_found` (a `system_id` that matches\nno System in the account) comes back in the standard error\nenvelope.\nFor an invalid scalar field, the `message` echoes back the\nreceived value (capped at 120 characters) — it is never stored\nby Capturia; only the names of the received fields are, visible\nin the API key's Recent errors tab. The `request_id` is\nalways in the `X-Request-ID` header.\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "leads",
                    "capture"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"phone\": \"+15145551234\",\n  \"sms_consent\": true,\n  \"first_name\": \"Alex\",\n  \"last_name\": \"Tremblay\",\n  \"email\": \"alex@example.com\",\n  \"source_label\": \"funnel-fb-jan\",\n  \"utm\": {\n    \"source\": \"facebook\",\n    \"medium\": \"cpc\",\n    \"campaign\": \"spring-2026\"\n  },\n  \"tags\": [\n    \"lead-chaud\",\n    \"vu-webinaire\"\n  ],\n  \"pipeline\": {\n    \"pipeline_slug\": \"ventes-b2b\",\n    \"stage_slug\": \"nouveau-lead\",\n    \"deal_value\": 2500,\n    \"expected_close_date\": \"2026-06-30\",\n    \"assigned_sales_rep_email\": \"vendeur@example.com\"\n  },\n  \"custom_fields\": {\n    \"type_propriete\": \"maison_isolee\",\n    \"delai_vente\": \"0_3_mois\"\n  },\n  \"address\": \"123 rue Principale, Montréal\",\n  \"postal_code\": \"H2X 1Y4\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"invalid_phone\",\n    \"message\": \"Received \\\"phone_number\\\" for field \\\"phone\\\" — Phone must be a valid number — accepted formats: E.164 (+15141234567), 10-digit NANP (5141234567), 11-digit with country code (15141234567), or formatted variants (\\\"(514) 123-4567\\\", \\\"1-514-123-4567\\\")\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": [\n      {\n        \"field\": \"phone\",\n        \"reason\": \"Phone must be a valid number — accepted formats: E.164 (+15141234567), 10-digit NANP (5141234567), 11-digit with country code (15141234567), or formatted variants (\\\"(514) 123-4567\\\", \\\"1-514-123-4567\\\")\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "4a6e61a2-015b-44bb-a47b-44a7f0647667",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "leads",
                    "capture"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"phone\": \"+15145551234\",\n  \"sms_consent\": true,\n  \"first_name\": \"Alex\",\n  \"last_name\": \"Tremblay\",\n  \"email\": \"alex@example.com\",\n  \"source_label\": \"funnel-fb-jan\",\n  \"utm\": {\n    \"source\": \"facebook\",\n    \"medium\": \"cpc\",\n    \"campaign\": \"spring-2026\"\n  },\n  \"tags\": [\n    \"lead-chaud\",\n    \"vu-webinaire\"\n  ],\n  \"pipeline\": {\n    \"pipeline_slug\": \"ventes-b2b\",\n    \"stage_slug\": \"nouveau-lead\",\n    \"deal_value\": 2500,\n    \"expected_close_date\": \"2026-06-30\",\n    \"assigned_sales_rep_email\": \"vendeur@example.com\"\n  },\n  \"custom_fields\": {\n    \"type_propriete\": \"maison_isolee\",\n    \"delai_vente\": \"0_3_mois\"\n  },\n  \"address\": \"123 rue Principale, Montréal\",\n  \"postal_code\": \"H2X 1Y4\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2efd53af-9ef6-458b-8548-fa1b1136dac5",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "leads",
                    "capture"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"phone\": \"+15145551234\",\n  \"sms_consent\": true,\n  \"first_name\": \"Alex\",\n  \"last_name\": \"Tremblay\",\n  \"email\": \"alex@example.com\",\n  \"source_label\": \"funnel-fb-jan\",\n  \"utm\": {\n    \"source\": \"facebook\",\n    \"medium\": \"cpc\",\n    \"campaign\": \"spring-2026\"\n  },\n  \"tags\": [\n    \"lead-chaud\",\n    \"vu-webinaire\"\n  ],\n  \"pipeline\": {\n    \"pipeline_slug\": \"ventes-b2b\",\n    \"stage_slug\": \"nouveau-lead\",\n    \"deal_value\": 2500,\n    \"expected_close_date\": \"2026-06-30\",\n    \"assigned_sales_rep_email\": \"vendeur@example.com\"\n  },\n  \"custom_fields\": {\n    \"type_propriete\": \"maison_isolee\",\n    \"delai_vente\": \"0_3_mois\"\n  },\n  \"address\": \"123 rue Principale, Montréal\",\n  \"postal_code\": \"H2X 1Y4\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "4127e7db-fb08-4eb0-9ed1-ba464e347236",
      "name": "Contacts",
      "description": {
        "content": "Full CRUD on contacts (prospects and customers)",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "ea35043b-7d67-4b40-8aa6-63ed154e308f",
          "name": "List contacts",
          "request": {
            "name": "List contacts",
            "description": {
              "content": "Returns the paginated list of the account's contacts (cursor v2).\nStable sort `created_at DESC, id DESC`. Supports case-insensitive\nsearch on `email`, `first_name`, `last_name`, `company`, filtering\nby tag, and optional inclusion of the custom field definitions in\n`meta`.\n\n### Merged contacts\n\nA contact absorbed by a merge no longer appears in the list: its\nhistory lives on the surviving contact, which is the only one listed.\n\n### Search\n\nThe `?search` parameter is split into words (separated by spaces).\nEach word must appear, case-insensitively, in at least one of the\n`email`, `first_name`, `last_name`, or `company` columns, and the\nwords are combined with AND, in any order:\n`?search=Jean Bouchard` finds the contact whose first name is \"Jean\"\nand whose last name is \"Bouchard\". Each word is sent as a quoted\nliteral value: commas, parentheses, and periods don't alter the\nfilter.\n\n### Including custom fields\n\nPass `?include=custom_field_definitions` to add the\n`meta.custom_field_definitions` field to the response — useful for\nrendering an edit form on your side without a second round-trip.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "contacts"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "cursor",
                  "value": "<string,null>",
                  "description": "Opaque pagination cursor — pass the `pagination.next_cursor` value from the previous page."
                },
                {
                  "disabled": false,
                  "key": "limit",
                  "value": "20",
                  "description": "Maximum number of results per page (default 20, max 100). Above that → 400 invalid_request."
                },
                {
                  "disabled": false,
                  "key": "created_after",
                  "value": "<dateTime>",
                  "description": "Filter — only resources created after this date (inclusive)."
                },
                {
                  "disabled": false,
                  "key": "created_before",
                  "value": "<dateTime>",
                  "description": "Filter — only resources created before this date (inclusive)."
                },
                {
                  "disabled": false,
                  "key": "search",
                  "value": "<string>",
                  "description": "Word search across email, first_name, last_name, company (case-insensitive; each word must match a column, words combined with AND)."
                },
                {
                  "disabled": false,
                  "key": "tag",
                  "value": "<uuid>",
                  "description": "UUID of a tag: returns only the contacts that carry this tag,\npaginated like the full list. To\ncount a campaign's leads, pass the `id` of its\n\"Campagne : <name>\" tag (`system_key` starting with `campaign:`\nin `GET /v1/tags`) and walk the pages (`next_cursor`)\nuntil `has_more: false`: `pagination.total_count` is only an\nestimate. A value that isn't a UUID is\nrejected (`400 invalid_request`, `details.field = \"tag\"`).\n"
                },
                {
                  "disabled": false,
                  "key": "include",
                  "value": "<string>",
                  "description": "Includes the `meta.custom_field_definitions` block in the response."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "bafa5c28-b7ac-4910-9fa5-487415f22f4e",
              "name": "Paginated list of contacts.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "search",
                      "value": "<string>"
                    },
                    {
                      "key": "tag",
                      "value": "<uuid>"
                    },
                    {
                      "key": "include",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": [\n    {\n      \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n      \"email\": \"alex@example.com\",\n      \"phone\": \"+15145551234\",\n      \"first_name\": \"Alex\",\n      \"last_name\": \"Tremblay\",\n      \"company\": \"Acme Inc.\",\n      \"source\": \"api\",\n      \"pipeline_stage_id\": null,\n      \"deal_value\": 2500,\n      \"is_priority\": false,\n      \"custom_fields\": null,\n      \"created_at\": \"2026-04-01T10:00:00.000Z\",\n      \"updated_at\": \"2026-04-01T10:00:00.000Z\"\n    }\n  ],\n  \"pagination\": {\n    \"next_cursor\": null,\n    \"has_more\": false,\n    \"limit\": 20,\n    \"cursor\": null,\n    \"total_count\": 1\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2f4013bb-7e8a-45c3-af07-bdbfc4ec1877",
              "name": "The request is malformed (missing header, invalid JSON, invalid parameter).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "search",
                      "value": "<string>"
                    },
                    {
                      "key": "tag",
                      "value": "<uuid>"
                    },
                    {
                      "key": "include",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_request\",\n    \"message\": \"Le paramètre 'cursor' est invalide ou expiré.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#invalid_request\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"field\": \"cursor\",\n      \"reason\": \"malformed_base64\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e698ec28-0e23-48c7-b17f-9a35289e5814",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "search",
                      "value": "<string>"
                    },
                    {
                      "key": "tag",
                      "value": "<uuid>"
                    },
                    {
                      "key": "include",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "36756643-b1d0-45f4-b26d-8236923e2ab7",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "search",
                      "value": "<string>"
                    },
                    {
                      "key": "tag",
                      "value": "<uuid>"
                    },
                    {
                      "key": "include",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b2f67881-805e-4034-9cc7-ace23830ad18",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "search",
                      "value": "<string>"
                    },
                    {
                      "key": "tag",
                      "value": "<uuid>"
                    },
                    {
                      "key": "include",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "63477d81-68fd-4625-b38e-f2acdb34e792",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "search",
                      "value": "<string>"
                    },
                    {
                      "key": "tag",
                      "value": "<uuid>"
                    },
                    {
                      "key": "include",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "d49bd45a-455f-4adf-8d17-c7241671aacb",
          "name": "Create a contact",
          "request": {
            "name": "Create a contact",
            "description": {
              "content": "Creates a contact under the API key's account, through the same path as the\ndashboard. An **email or a phone number** is required\n(either one is enough). The email is stored in lowercase; the\nphone number is normalized to E.164 when it's a valid North American\nnumber.\n\nThe person is looked up across all of the account's identities\n(primary and secondary emails and phone numbers, case-insensitive).\nIf they already exist, nothing is created: the response is\n`409 duplicate_contact`, with the existing contact in `data` and the\nmatching fields in `details.conflicting_fields`. If the email and\nthe phone number belong to two different contacts, the response is\n`409 duplicate_resource`, with no contact.\n\n### Source and consent\n\nThe created contact has the source `api`. An integration doesn't name\nanyone who actually met this contact: **no implied\nconsent** (SMS or email) is recorded when it's created. Capturia's SMS\nfollow-ups and prospecting emails are only sent to it\nonce a real basis for consent exists\n(form, booking, inbound message, attestation in\nCapturia). To capture a lead who just filled out your form,\nwith their consent, use `POST /v1/leads/capture`.\n\n### Idempotency\n\nThe `Idempotency-Key` header is **optional but recommended**.\nA second request with the same key and the same payload returns the\noriginal response without repeating the operation. A second request with\nthe same key and a different payload returns `409 idempotency_conflict`.\n\n### Custom fields\n\nThe keys of `custom_fields` are the field's **name** as defined\nin Capturia (or, equivalently, the id of its definition) —\nthe same contract as `/v1/events` and `/v1/leads/capture`. The values\nare validated against the account's definitions\n(`client_custom_field_definitions`). An unknown field or an\nincompatible type returns `400 invalid_custom_fields` with `details`\nlisting the violations.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "contacts"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                "key": "Idempotency-Key",
                "value": "<string>"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "e5389877-eb65-447e-82a9-94b3695518a7",
              "name": "Contact created.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"email\": \"alex@example.com\",\n  \"first_name\": \"Alex\",\n  \"last_name\": \"Tremblay\",\n  \"phone\": \"+15145551234\",\n  \"company\": \"Acme Inc.\",\n  \"deal_value\": 2500\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"email\": \"alex@example.com\",\n    \"phone\": \"+15145551234\",\n    \"first_name\": \"Alex\",\n    \"last_name\": \"Tremblay\",\n    \"company\": \"Acme Inc.\",\n    \"source\": \"api\",\n    \"pipeline_stage_id\": null,\n    \"deal_value\": 2500,\n    \"is_priority\": false,\n    \"custom_fields\": null,\n    \"created_at\": \"2026-05-04T10:00:00.000Z\",\n    \"updated_at\": \"2026-05-04T10:00:00.000Z\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f4d7d67d-bbb2-4453-8f47-991dd2025592",
              "name": "Parameter or body validation failed.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"email\": \"alex@example.com\",\n  \"first_name\": \"Alex\",\n  \"last_name\": \"Tremblay\",\n  \"phone\": \"+15145551234\",\n  \"company\": \"Acme Inc.\",\n  \"deal_value\": 2500\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"validation_error\",\n    \"message\": \"Le champ 'email' est requis.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#validation_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"validation_errors\": [\n        {\n          \"path\": \"/email\",\n          \"reason\": \"required\"\n        }\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0268515c-ca59-4922-8d35-bfc04ff098db",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"email\": \"alex@example.com\",\n  \"first_name\": \"Alex\",\n  \"last_name\": \"Tremblay\",\n  \"phone\": \"+15145551234\",\n  \"company\": \"Acme Inc.\",\n  \"deal_value\": 2500\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0cbc05b7-3b8a-402b-9a8c-82dc2ab5dd69",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"email\": \"alex@example.com\",\n  \"first_name\": \"Alex\",\n  \"last_name\": \"Tremblay\",\n  \"phone\": \"+15145551234\",\n  \"company\": \"Acme Inc.\",\n  \"deal_value\": 2500\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ee18966b-0cc0-482b-bef4-42b4b578be62",
              "name": "A resource with a conflicting unique identifier already exists.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"email\": \"alex@example.com\",\n  \"first_name\": \"Alex\",\n  \"last_name\": \"Tremblay\",\n  \"phone\": \"+15145551234\",\n  \"company\": \"Acme Inc.\",\n  \"deal_value\": 2500\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"conflict_error\",\n    \"code\": \"duplicate_resource\",\n    \"message\": \"Un contact avec cet email existe déjà.\",\n    \"hint\": \"Utilise PATCH /v1/contacts/{id} pour mettre à jour le contact existant.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#duplicate_resource\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"conflicting_field\": \"email\",\n      \"conflicting_value\": \"prospect@example.com\",\n      \"existing_id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T8\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "092208e3-5add-46ba-871e-326eec8ffefa",
              "name": "The `Content-Type` header is missing or not supported for this endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"email\": \"alex@example.com\",\n  \"first_name\": \"Alex\",\n  \"last_name\": \"Tremblay\",\n  \"phone\": \"+15145551234\",\n  \"company\": \"Acme Inc.\",\n  \"deal_value\": 2500\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unsupported Media Type",
              "code": 415,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_content_type\",\n    \"message\": \"Content-Type `text/plain` non supporté. Utilise `application/json`.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/conventions#content-type\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"received\": \"text/plain\",\n      \"expected\": [\n        \"application/json\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "61e1afc5-eaae-40c0-adb9-097211bf84dc",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"email\": \"alex@example.com\",\n  \"first_name\": \"Alex\",\n  \"last_name\": \"Tremblay\",\n  \"phone\": \"+15145551234\",\n  \"company\": \"Acme Inc.\",\n  \"deal_value\": 2500\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0a832053-b1b1-4226-b812-5962953ade4e",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"email\": \"alex@example.com\",\n  \"first_name\": \"Alex\",\n  \"last_name\": \"Tremblay\",\n  \"phone\": \"+15145551234\",\n  \"company\": \"Acme Inc.\",\n  \"deal_value\": 2500\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "a56c7782-438e-4966-97c0-8757bb56cc7b",
          "name": "Retrieve a contact",
          "request": {
            "name": "Retrieve a contact",
            "description": {
              "content": "Returns a contact by its ID. The `?expand=tags` parameter joins the\n`client_contact_tags` table to include the attached tags (id, name,\ncolor, system_key) without an extra round-trip.\n\nThe ID of a contact absorbed by a merge returns `404`: reads, updates,\nand deletes go through the surviving contact. If the merge is undone\nfrom the dashboard, the contact becomes reachable again under its ID.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "contacts",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "expand",
                  "value": "<string>",
                  "description": "If `tags`, adds `client_contact_tags` to the returned contact."
                }
              ],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<uuid>",
                  "key": "id",
                  "description": "(Required) UUID of the resource."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "04ad4dae-3b8f-4764-984f-67dff106e52b",
              "name": "Contact found.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "expand",
                      "value": "<string>"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"email\": \"alex@example.com\",\n    \"phone\": \"+15145551234\",\n    \"first_name\": \"Alex\",\n    \"last_name\": \"Tremblay\",\n    \"company\": \"Acme Inc.\",\n    \"source\": \"api\",\n    \"pipeline_stage_id\": null,\n    \"deal_value\": 2500,\n    \"is_priority\": false,\n    \"custom_fields\": null,\n    \"created_at\": \"2026-04-01T10:00:00.000Z\",\n    \"updated_at\": \"2026-04-01T10:00:00.000Z\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9c05dae7-61d6-479a-8544-e100e74480df",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "expand",
                      "value": "<string>"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "831adaa5-7328-46f5-8ec8-f493855335d9",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "expand",
                      "value": "<string>"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d5c107e0-d79a-4bdc-a5f0-a4d9804e25cb",
              "name": "The requested resource doesn't exist (or isn't within the tenant's scope).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "expand",
                      "value": "<string>"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"not_found_error\",\n    \"code\": \"resource_not_found\",\n    \"message\": \"Le contact demandé n'existe pas.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#resource_not_found\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "c2cb9e7b-373e-4fda-8d94-03f0657d0bc9",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "expand",
                      "value": "<string>"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "145f339d-0c1b-4e9f-92ed-0350c6e63cba",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "expand",
                      "value": "<string>"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "cb21ec6a-e68b-4a1c-a6bb-a75deb110fca",
          "name": "Update a contact",
          "request": {
            "name": "Update a contact",
            "description": {
              "content": "Updates the provided fields of the contact (omitted fields are kept).\nYou must provide at least one field, otherwise `400 no_fields`.\n\nThe `custom_fields` field is **merged** with the existing values\n(keys you don't provide are kept). The keys are the field's **name**\n(or the id of its definition); an unknown key returns\n`400 invalid_custom_fields`. Passing `null` clears all custom\nfields.\n\nPhone number and email are unique per account: a value already\nheld by another contact (as a primary or secondary\ncontact detail) returns `409 duplicate_resource`\n(`details.conflicting_field` names the field) and the contact isn't\nmodified. The phone number is compared once normalized to E.164.\n\nThe update goes through the same service as the contact in the\ndashboard: same validations (email, phone number, positive amounts,\neach custom field's value according to its type), same entry in\nthe account's timeline and activity log, and the same\n`lead_updated` webhook. An invalid value returns\n`400 validation_error` (`details[].field` names the field); a\nphone number that can't be dialed (that doesn't normalize to\nE.164) is rejected with `details[].reason` = `invalid_phone`.\n\nA contact always keeps at least a first name, a last name, an email, or\na phone number: a request that would clear the last one returns\n`400 validation_error` (`details[].reason` = `identity_required`), and\nthe contact isn't modified.\n\nThe value (`deal_value`) of an archived contact can't be changed:\n`422 business_rule_violation` (`details.reason` =\n`contact_archived`), and no field from the request is written.\nRestore the contact from the dashboard first.\n\nThe `notes` field is the contact's free-form text, replaced on every\nwrite. To add a note to the contact's timeline, use\n`POST /v1/contacts/{id}/notes`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "contacts",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<uuid>",
                  "key": "id",
                  "description": "(Required) UUID of the resource."
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PATCH",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"<email>\",\n  \"first_name\": \"<string,null>\",\n  \"last_name\": \"<string,null>\",\n  \"phone\": \"<string,null>\",\n  \"company\": \"<string,null>\",\n  \"deal_value\": \"<number,null>\",\n  \"is_priority\": \"<boolean>\",\n  \"notes\": \"<string,null>\",\n  \"custom_fields\": {\n    \"key_0\": 9246.456157426555,\n    \"key_1\": 391\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "bb88b92d-002f-4826-8369-d5c164633995",
              "name": "Contact updated.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"first_name\": \"Alexandre\",\n  \"deal_value\": 5000,\n  \"is_priority\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"email\": \"alex@example.com\",\n    \"is_priority\": false,\n    \"created_at\": \"2026-05-04T12:34:56.789Z\",\n    \"updated_at\": \"2026-05-04T12:34:56.789Z\",\n    \"phone\": \"+15145551234\",\n    \"first_name\": \"Alex\",\n    \"last_name\": \"Tremblay\",\n    \"company\": \"Acme Inc.\",\n    \"source\": \"api\",\n    \"pipeline_stage_id\": \"3c836aa9-0637-46a0-614c-dd62790dbca2\",\n    \"deal_value\": 2500,\n    \"custom_fields\": {\n      \"key_0\": \"string\",\n      \"key_1\": true\n    },\n    \"address\": \"73 rue Bérard, Gatineau, QC J8T 5R8\",\n    \"street\": \"73 rue Bérard\",\n    \"city\": \"Gatineau\",\n    \"sector\": \"Hull\",\n    \"region\": \"Outaouais\",\n    \"province\": \"QC\",\n    \"country\": \"Canada\",\n    \"postal_code\": \"J8T 5R8\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "bf8b15d5-d9de-4934-8757-2ed4a617f163",
              "name": "Parameter or body validation failed.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"first_name\": \"Alexandre\",\n  \"deal_value\": 5000,\n  \"is_priority\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"validation_error\",\n    \"message\": \"Le champ 'email' est requis.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#validation_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"validation_errors\": [\n        {\n          \"path\": \"/email\",\n          \"reason\": \"required\"\n        }\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "33ff4769-beb7-4fa3-b4c7-3eca84c3678a",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"first_name\": \"Alexandre\",\n  \"deal_value\": 5000,\n  \"is_priority\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8f9cca7e-120b-4bf9-a911-76368e1131c3",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"first_name\": \"Alexandre\",\n  \"deal_value\": 5000,\n  \"is_priority\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "bef3fa8b-6c2c-4bcc-9c8a-9f94c82a0e51",
              "name": "The requested resource doesn't exist (or isn't within the tenant's scope).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"first_name\": \"Alexandre\",\n  \"deal_value\": 5000,\n  \"is_priority\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"not_found_error\",\n    \"code\": \"resource_not_found\",\n    \"message\": \"Le contact demandé n'existe pas.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#resource_not_found\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1d116497-b91c-4d09-9b35-8722d4e6d70a",
              "name": "A resource with a conflicting unique identifier already exists.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"first_name\": \"Alexandre\",\n  \"deal_value\": 5000,\n  \"is_priority\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"conflict_error\",\n    \"code\": \"duplicate_resource\",\n    \"message\": \"Un contact avec cet email existe déjà.\",\n    \"hint\": \"Utilise PATCH /v1/contacts/{id} pour mettre à jour le contact existant.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#duplicate_resource\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"conflicting_field\": \"email\",\n      \"conflicting_value\": \"prospect@example.com\",\n      \"existing_id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T8\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d94b1ba8-d013-424e-81a7-a8c08ce24417",
              "name": "The request is syntactically valid but violates a business rule.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"first_name\": \"Alexandre\",\n  \"deal_value\": 5000,\n  \"is_priority\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"business_rule_error\",\n    \"code\": \"business_rule_violation\",\n    \"message\": \"Impossible d'envoyer un devis déjà accepté.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#business_rule_violation\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"rule\": \"quote_already_accepted\",\n      \"current_state\": \"accepted\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "4a0f3cfe-9913-4c66-ad3c-e9d46ae0c6cf",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"first_name\": \"Alexandre\",\n  \"deal_value\": 5000,\n  \"is_priority\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "30352a3c-04ab-4725-8be2-1fc0ab0fb8db",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"first_name\": \"Alexandre\",\n  \"deal_value\": 5000,\n  \"is_priority\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "0b2f0423-7931-4ca8-b52b-a12fe61a21cb",
          "name": "Delete a contact",
          "request": {
            "name": "Delete a contact",
            "description": {
              "content": "Permanently deletes the contact, exactly as from the\ndashboard: its inbox conversation, its exchanges (SMS, emails,\nchat transcripts), its bookings, and its files go with\nit. Its voicemails and media received by SMS go too, as\ndo the audio of its calls and meetings and the word-for-word\ntranscripts of its calls, including at our telephony\nprovider: this removal is durable and retried automatically if the\nprovider is temporarily unreachable. Its call log\n(summary, notes, outcome) remains, detached from the contact, as do\nsales, orders, and payments.\n\nRemoval outside the platform (bookings in the connected Google calendar,\nstored files) happens right after, on a best-effort basis: the\ncontact's deletion from the database succeeds even if an external service is\ntemporarily unreachable. The response's `cleanup` object reports it —\n`failed` > 0 means some Google bookings couldn't be\nremoved from the calendar (account disconnected, outage) and remain there.\n\nRequires the `contacts:delete` scope, separate from writing: as in\nthe dashboard, deleting a contact is a separate permission.\nOnly someone who can delete leads in Capturia\ncan grant it to an API key.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "contacts",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<uuid>",
                  "key": "id",
                  "description": "(Required) UUID of the resource."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "DELETE",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "227b33c4-9ad8-4f98-946e-018d45ea2126",
              "name": "Contact deleted.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"deleted\": true,\n    \"cleanup\": {\n      \"attempted\": 0,\n      \"succeeded\": 0,\n      \"failed\": 0\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "94f02c84-2544-44b1-aff2-7db627fcd6be",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "52ce8110-4a84-43ea-94c2-71f15ac13321",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "a7e16386-6ef4-4be0-b7aa-54f277ee6919",
              "name": "The requested resource doesn't exist (or isn't within the tenant's scope).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"not_found_error\",\n    \"code\": \"resource_not_found\",\n    \"message\": \"Le contact demandé n'existe pas.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#resource_not_found\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8dbdaff2-55e8-4999-a8b9-545c85ed5b0c",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2ff2f9f4-bbfc-4b72-980e-36992209e509",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "d1c0b0fc-bd78-454e-a086-c65940bd193d",
          "name": "Contact timeline (chronological activity)",
          "request": {
            "name": "Contact timeline (chronological activity)",
            "description": {
              "content": "Returns the contact's activity timeline (stage changes,\nSMS/email sends, bookings, etc.) in reverse chronological order.\n\n### Current limitation\n\nThe implementation is a stub: the `pipeline_history` table references\nthe other, internal `contacts` table (not `client_contacts`), so\nthe returned list is **always empty** today. Pagination\nis validated but not applied. To be implemented in a later\nphase once the history is unified on `client_contacts`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "contacts",
                ":id",
                "timeline"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "cursor",
                  "value": "<string,null>",
                  "description": "Opaque pagination cursor — pass the `pagination.next_cursor` value from the previous page."
                },
                {
                  "disabled": false,
                  "key": "limit",
                  "value": "20",
                  "description": "Maximum number of results per page (default 20, max 100). Above that → 400 invalid_request."
                },
                {
                  "disabled": false,
                  "key": "created_after",
                  "value": "<dateTime>",
                  "description": "Filter — only resources created after this date (inclusive)."
                },
                {
                  "disabled": false,
                  "key": "created_before",
                  "value": "<dateTime>",
                  "description": "Filter — only resources created before this date (inclusive)."
                }
              ],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<uuid>",
                  "key": "id",
                  "description": "(Required) UUID of the resource."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "a0cc00d5-7f4c-46fd-82dc-b7d1c16690d1",
              "name": "Empty list (stub implementation) with valid pagination.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "timeline"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": [],\n  \"pagination\": {\n    \"next_cursor\": null,\n    \"has_more\": false,\n    \"limit\": 20,\n    \"cursor\": null,\n    \"total_count\": 0\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "35293016-cac3-4d79-9e65-39afecda204c",
              "name": "The request is malformed (missing header, invalid JSON, invalid parameter).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "timeline"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_request\",\n    \"message\": \"Le paramètre 'cursor' est invalide ou expiré.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#invalid_request\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"field\": \"cursor\",\n      \"reason\": \"malformed_base64\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b1ddae2c-17aa-44f2-8479-1cecf9b73a3c",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "timeline"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "5728a383-72de-45b7-a416-5555e7fd684f",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "timeline"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "24fc0917-97af-4739-a12d-ca3889372d9b",
              "name": "The requested resource doesn't exist (or isn't within the tenant's scope).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "timeline"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"not_found_error\",\n    \"code\": \"resource_not_found\",\n    \"message\": \"Le contact demandé n'existe pas.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#resource_not_found\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d2f3f978-7bce-4213-87d5-1ebb76f85e62",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "timeline"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "178551ed-d9ce-4a33-be11-9e81b502f49b",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "timeline"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "a5324e0c-486d-4fe5-aaf1-ac82babc5c1c",
          "name": "Attach one or more tags to a contact",
          "request": {
            "name": "Attach one or more tags to a contact",
            "description": {
              "content": "Attaches one or more tags to the contact through the\n`client_contact_tags` join table. The tags must belong to the same account\nas the contact — otherwise `400 validation_error` with the list of\ntags not found. An identifier that isn't a UUID also returns\n`400 validation_error`.\n\nThe operation is idempotent at the database level: calling it twice with the\nsame `tag_ids` doesn't create duplicates (upsert\n`ON CONFLICT (contact_id, tag_id) DO NOTHING`).\n\n### Campaign tags\n\nA tag whose `system_key` starts with `campaign:` is managed by\nCapturia: it follows the lead's campaign. If the contact already carries it, it\nis ignored (sending back a lead's list of tags stays idempotent).\nIf the contact doesn't carry it, it returns `409 tag_managed_by_capturia` and\nnone of the request's tags are attached.\n\n### Listing a contact's tags\n\nThere's no dedicated `GET` — use\n`GET /v1/contacts/{id}?expand=tags` to retrieve the tags\ncurrently attached.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "contacts",
                ":id",
                "tags"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<uuid>",
                  "key": "id",
                  "description": "(Required) UUID of the resource."
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"tag_ids\": [\n    \"<uuid>\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "94ece800-e44e-4e53-8c94-cce9e6b88473",
              "name": "Tags attached. Returns the contact's up-to-date list of tags.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "tags"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"tag_ids\": [\n    \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"9a4c2b3d-0e5f-5a6b-c7d8-e9f0a1b2c3d4\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"contact_id\": \"0a1b2c3d-4e5f-6a7b-8c9d-0e1f2a3b4c5d\",\n    \"tags\": [\n      {\n        \"tag_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n        \"client_tags\": {\n          \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n          \"name\": \"Lead chaud\",\n          \"color\": \"#ef4444\",\n          \"system_key\": null\n        }\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ef17c9ea-63d3-425f-89f8-ea83d5b97993",
              "name": "Parameter or body validation failed.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "tags"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"tag_ids\": [\n    \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"9a4c2b3d-0e5f-5a6b-c7d8-e9f0a1b2c3d4\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"validation_error\",\n    \"message\": \"Le champ 'email' est requis.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#validation_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"validation_errors\": [\n        {\n          \"path\": \"/email\",\n          \"reason\": \"required\"\n        }\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0b95d3c7-18f0-4c11-82b0-62eea897f06d",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "tags"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"tag_ids\": [\n    \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"9a4c2b3d-0e5f-5a6b-c7d8-e9f0a1b2c3d4\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "519624f5-f792-45bf-b333-f36e0c50e2a2",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "tags"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"tag_ids\": [\n    \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"9a4c2b3d-0e5f-5a6b-c7d8-e9f0a1b2c3d4\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "4f2de7b3-f6c0-492e-847b-a2716f731890",
              "name": "The requested resource doesn't exist (or isn't within the tenant's scope).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "tags"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"tag_ids\": [\n    \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"9a4c2b3d-0e5f-5a6b-c7d8-e9f0a1b2c3d4\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"not_found_error\",\n    \"code\": \"resource_not_found\",\n    \"message\": \"Le contact demandé n'existe pas.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#resource_not_found\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d503ad6c-bcbf-4eec-badb-cdfc83720f0b",
              "name": "The targeted tag is a campaign tag managed by Capturia (a `system_key` that\nstarts with `campaign:`): it follows the lead's campaign and can't be attached\nor detached manually.\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "tags"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"tag_ids\": [\n    \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"9a4c2b3d-0e5f-5a6b-c7d8-e9f0a1b2c3d4\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"conflict_error\",\n    \"code\": \"tag_managed_by_capturia\",\n    \"message\": \"Ce tag de campagne est géré par Capturia : il ne se pose ni ne se retire à la main.\",\n    \"hint\": \"Capturia pose ce tag sur chaque lead de la campagne et le retire quand le lead change de campagne. Pour changer la campagne d'un lead, choisis-la dans sa fiche du tableau de bord.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#tag_managed_by_capturia\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"tag_ids\": [\n        \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9c63fd89-019d-4c02-bed1-7e6b241f30b3",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "tags"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"tag_ids\": [\n    \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"9a4c2b3d-0e5f-5a6b-c7d8-e9f0a1b2c3d4\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "119a97ed-59d5-446a-be7f-93ebc4cfe263",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "tags"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"tag_ids\": [\n    \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"9a4c2b3d-0e5f-5a6b-c7d8-e9f0a1b2c3d4\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "785c901b-b5a4-4d01-aea3-f5f60a19fa4c",
          "name": "Detach a tag from a contact",
          "request": {
            "name": "Detach a tag from a contact",
            "description": {
              "content": "Removes the association between a contact and a tag. The tag itself\nisn't deleted — it remains available for other contacts.\n\nIf the tag isn't attached to the contact (or if the contact belongs\nto another account), returns `404 resource_not_found`.\n\nA campaign tag (`system_key` starting with `campaign:`) follows\nthe lead's campaign: detaching it returns\n`409 tag_managed_by_capturia`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "contacts",
                ":id",
                "tags",
                ":tagId"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<uuid>",
                  "key": "id",
                  "description": "(Required) UUID of the resource."
                },
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<uuid>",
                  "key": "tagId",
                  "description": "(Required) UUID of the tag to detach."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "DELETE",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "338cd701-a73c-4e92-b2d5-e35f0e3cd1c1",
              "name": "Tag detached.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "tags",
                    ":tagId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    },
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "tagId",
                      "description": "(Required) UUID of the tag to detach."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"contact_id\": \"0a1b2c3d-4e5f-6a7b-8c9d-0e1f2a3b4c5d\",\n    \"tag_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"removed\": true\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "85cc183d-215d-4d1f-94a4-30c1171428e2",
              "name": "Parameter or body validation failed.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "tags",
                    ":tagId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    },
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "tagId",
                      "description": "(Required) UUID of the tag to detach."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"validation_error\",\n    \"message\": \"Le champ 'email' est requis.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#validation_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"validation_errors\": [\n        {\n          \"path\": \"/email\",\n          \"reason\": \"required\"\n        }\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "a3afcef3-0e23-4458-8fda-af698a6dd06f",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "tags",
                    ":tagId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    },
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "tagId",
                      "description": "(Required) UUID of the tag to detach."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7f7343e5-46d2-444e-9c3f-544121f7f2f7",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "tags",
                    ":tagId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    },
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "tagId",
                      "description": "(Required) UUID of the tag to detach."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0655748d-7bd1-45b4-8c20-b28e6b023a4f",
              "name": "The requested resource doesn't exist (or isn't within the tenant's scope).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "tags",
                    ":tagId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    },
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "tagId",
                      "description": "(Required) UUID of the tag to detach."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"not_found_error\",\n    \"code\": \"resource_not_found\",\n    \"message\": \"Le contact demandé n'existe pas.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#resource_not_found\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "fe8c8f85-5236-450b-be2e-e834d9834392",
              "name": "The targeted tag is a campaign tag managed by Capturia (a `system_key` that\nstarts with `campaign:`): it follows the lead's campaign and can't be attached\nor detached manually.\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "tags",
                    ":tagId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    },
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "tagId",
                      "description": "(Required) UUID of the tag to detach."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"conflict_error\",\n    \"code\": \"tag_managed_by_capturia\",\n    \"message\": \"Ce tag de campagne est géré par Capturia : il ne se pose ni ne se retire à la main.\",\n    \"hint\": \"Capturia pose ce tag sur chaque lead de la campagne et le retire quand le lead change de campagne. Pour changer la campagne d'un lead, choisis-la dans sa fiche du tableau de bord.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#tag_managed_by_capturia\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"tag_ids\": [\n        \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "c0c82090-f1cb-4267-aca3-08d085798932",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "tags",
                    ":tagId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    },
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "tagId",
                      "description": "(Required) UUID of the tag to detach."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "988dba30-4f95-4f1e-9d59-2041e9b40faa",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "tags",
                    ":tagId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    },
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "tagId",
                      "description": "(Required) UUID of the tag to detach."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "2d49e1c0-0c63-4b07-90d4-ef894ac86d5b",
          "name": "Add a note to a contact's timeline",
          "request": {
            "name": "Add a note to a contact's timeline",
            "description": {
              "content": "Adds a note to the contact's timeline, exactly as from\nthe contact in the dashboard: it's added to the previous notes,\nappears in the contact's Notes tab, and feeds the lead's\nqualification. The note is signed by the API key that wrote it.\n\nNot to be confused with the contact's free-form text field `notes`\n(`PATCH /v1/contacts/{id}`), replaced on every write.\n\nThe content is required and is at most 20,000 characters; otherwise\n`400 validation_error`. A contact that's unknown, belongs to another account, or\nwas merged into another contact returns `404`.\n\n### Idempotency\n\nThe `Idempotency-Key` header is **optional but recommended**: a\nsecond request with the same key, the same contact, and the same content\nreturns the original note without writing a second one. The same key\nwith another contact or other content returns\n`409 idempotency_conflict`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "contacts",
                ":id",
                "notes"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<uuid>",
                  "key": "id",
                  "description": "(Required) UUID of the resource."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                "key": "Idempotency-Key",
                "value": "<string>"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"content\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "1591c450-d451-452c-aaef-8d452c8d93e2",
              "name": "Note added to the contact's timeline.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "notes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"content\": \"Appel de suivi : le client veut une soumission pour 3 succursales.\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"5c6d7e8f-9a0b-4c1d-8e2f-3a4b5c6d7e8f\",\n    \"contact_id\": \"0a1b2c3d-4e5f-6a7b-8c9d-0e1f2a3b4c5d\",\n    \"content\": \"Appel de suivi : le client veut une soumission pour 3 succursales.\",\n    \"created_at\": \"2026-10-06T14:30:00Z\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e459b7a7-7e0a-41c3-a6a4-9e3b07380fa3",
              "name": "Parameter or body validation failed.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "notes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"content\": \"Appel de suivi : le client veut une soumission pour 3 succursales.\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"validation_error\",\n    \"message\": \"Le champ 'email' est requis.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#validation_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"validation_errors\": [\n        {\n          \"path\": \"/email\",\n          \"reason\": \"required\"\n        }\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "295d830a-11eb-4ed6-8630-bd25e9e6f66a",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "notes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"content\": \"Appel de suivi : le client veut une soumission pour 3 succursales.\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f2ac1336-3872-42fa-8699-c45dae0fa181",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "notes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"content\": \"Appel de suivi : le client veut une soumission pour 3 succursales.\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9f75c0d0-94d9-4b1a-b70e-9e45338427b4",
              "name": "The requested resource doesn't exist (or isn't within the tenant's scope).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "notes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"content\": \"Appel de suivi : le client veut une soumission pour 3 succursales.\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"not_found_error\",\n    \"code\": \"resource_not_found\",\n    \"message\": \"Le contact demandé n'existe pas.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#resource_not_found\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "785bfff2-264c-44ae-866e-c39e1ed56295",
              "name": "A previous request with the same `Idempotency-Key` used a different payload,\nor is still being processed.\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "notes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"content\": \"Appel de suivi : le client veut une soumission pour 3 succursales.\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"idempotency_error\",\n    \"code\": \"idempotency_conflict\",\n    \"message\": \"Une requête avec cette Idempotency-Key existe avec un payload différent.\",\n    \"hint\": \"Utilise une nouvelle Idempotency-Key, ou rejoue la requête originale à l'identique.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/conventions#idempotency\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"idempotency_key\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n      \"original_request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T6\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "180a87d2-73dd-4d87-8efb-6b2974db13c7",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "notes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"content\": \"Appel de suivi : le client veut une soumission pour 3 succursales.\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "a3ace7f4-d22d-4c5b-aaab-2581fb2dd499",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    ":id",
                    "notes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"content\": \"Appel de suivi : le client veut une soumission pour 3 succursales.\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "4923af68-9fa3-4a8d-a0b1-26033bb12ab9",
          "name": "Create or update multiple contacts in one request",
          "request": {
            "name": "Create or update multiple contacts in one request",
            "description": {
              "content": "Atomic upsert of up to 100 contacts in a single request.\nContacts whose email already exists under the account are **updated**\n(the other fields you provide replace the existing values), the\nrest are **inserted**.\n\n### Internal deduplication\n\nThe payload is deduplicated internally by `lower(email)` (last entry\nwins) before the upsert. The order of the contacts in the array and the\ncase of the email don't affect the idempotency hash.\n\n### Idempotency\n\nThe `Idempotency-Key` header is **optional but recommended**. The\nidempotency hash covers the payload **after internal deduplication** —\na network retry stays idempotent even if you resend the contacts in\na different order or with different email casing.\n\n### Response\n\nThe endpoint returns `200` with `{data: {processed, contacts: []}}`\n— no per-contact multi-status. A validation error on a\nsingle contact rejects the whole batch (`400 validation_error`\nwith `details` listing each faulty row). A database error\nduring the upsert returns `500` — contacts already persisted\nbefore the error remain (no transactional rollback\nacross statements).\n\nWhen `system_id` is provided and resolves to an active System, the\nresponse also includes `system_routing`: the summary of routing the\n**created** contacts to that System. Routing is best-effort\n(the upsert is already committed when it runs) — `refused + errors` =\ncreated contacts that stayed in the main System.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "contacts",
                "batch"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                "key": "Idempotency-Key",
                "value": "<string>"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"contacts\": [\n    {\n      \"email\": \"<email>\",\n      \"first_name\": \"<string>\",\n      \"last_name\": \"<string>\",\n      \"phone\": \"<string>\",\n      \"company\": \"<string>\",\n      \"deal_value\": \"<number>\"\n    }\n  ],\n  \"system_id\": \"<uuid>\",\n  \"trigger_automations\": false\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "27b19a35-1a1e-4149-8015-ff2ac07b49da",
              "name": "Batch processed. `processed` = number of contacts successfully inserted or updated.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    "batch"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contacts\": [\n    {\n      \"email\": \"alex@example.com\",\n      \"first_name\": \"Alex\",\n      \"last_name\": \"Tremblay\",\n      \"phone\": \"+15145551234\",\n      \"company\": \"Acme Inc.\",\n      \"deal_value\": 2500\n    },\n    {\n      \"email\": \"morgan@example.com\",\n      \"first_name\": \"Morgan\",\n      \"last_name\": \"Bélanger\",\n      \"company\": \"Example Inc.\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"processed\": 2,\n    \"automations_enrolled\": 0,\n    \"automations_skipped_rate_limit\": 0,\n    \"sequences_enrolled\": 0,\n    \"contacts\": [\n      {\n        \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n        \"email\": \"alex@example.com\",\n        \"first_name\": \"Alex\",\n        \"last_name\": \"Tremblay\",\n        \"phone\": \"+15145551234\",\n        \"company\": \"Acme Inc.\",\n        \"deal_value\": 2500,\n        \"address\": \"73 rue Bérard, Gatineau, QC J8T 5R8\",\n        \"street\": \"73 rue Bérard\",\n        \"city\": \"Gatineau\",\n        \"sector\": null,\n        \"region\": \"Outaouais\",\n        \"province\": \"QC\",\n        \"country\": \"Canada\",\n        \"postal_code\": \"J8T 5R8\",\n        \"created_at\": \"2026-04-01T10:00:00.000Z\",\n        \"updated_at\": \"2026-05-04T10:00:00.000Z\"\n      },\n      {\n        \"id\": \"9a4c2b3d-0e5f-5a6b-c7d8-e9f0a1b2c3d4\",\n        \"email\": \"morgan@example.com\",\n        \"first_name\": \"Morgan\",\n        \"last_name\": \"Bélanger\",\n        \"phone\": null,\n        \"company\": \"Example Inc.\",\n        \"deal_value\": null,\n        \"address\": null,\n        \"street\": null,\n        \"city\": null,\n        \"sector\": null,\n        \"region\": null,\n        \"province\": null,\n        \"country\": null,\n        \"postal_code\": null,\n        \"created_at\": \"2026-05-04T10:00:00.000Z\",\n        \"updated_at\": \"2026-05-04T10:00:00.000Z\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "093d2733-ef9a-479b-9302-d288cae78b82",
              "name": "Parameter or body validation failed.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    "batch"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contacts\": [\n    {\n      \"email\": \"alex@example.com\",\n      \"first_name\": \"Alex\",\n      \"last_name\": \"Tremblay\",\n      \"phone\": \"+15145551234\",\n      \"company\": \"Acme Inc.\",\n      \"deal_value\": 2500\n    },\n    {\n      \"email\": \"morgan@example.com\",\n      \"first_name\": \"Morgan\",\n      \"last_name\": \"Bélanger\",\n      \"company\": \"Example Inc.\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"validation_error\",\n    \"message\": \"Le champ 'email' est requis.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#validation_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"validation_errors\": [\n        {\n          \"path\": \"/email\",\n          \"reason\": \"required\"\n        }\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e33bbe5d-8fd9-4076-92cb-2baa028d8bed",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    "batch"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contacts\": [\n    {\n      \"email\": \"alex@example.com\",\n      \"first_name\": \"Alex\",\n      \"last_name\": \"Tremblay\",\n      \"phone\": \"+15145551234\",\n      \"company\": \"Acme Inc.\",\n      \"deal_value\": 2500\n    },\n    {\n      \"email\": \"morgan@example.com\",\n      \"first_name\": \"Morgan\",\n      \"last_name\": \"Bélanger\",\n      \"company\": \"Example Inc.\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "55b952c2-16cf-44b2-8cde-72b722dfd27a",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    "batch"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contacts\": [\n    {\n      \"email\": \"alex@example.com\",\n      \"first_name\": \"Alex\",\n      \"last_name\": \"Tremblay\",\n      \"phone\": \"+15145551234\",\n      \"company\": \"Acme Inc.\",\n      \"deal_value\": 2500\n    },\n    {\n      \"email\": \"morgan@example.com\",\n      \"first_name\": \"Morgan\",\n      \"last_name\": \"Bélanger\",\n      \"company\": \"Example Inc.\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "c495b3e1-334f-4a60-8041-a46c30df58bc",
              "name": "A previous request with the same `Idempotency-Key` used a different payload,\nor is still being processed.\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    "batch"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contacts\": [\n    {\n      \"email\": \"alex@example.com\",\n      \"first_name\": \"Alex\",\n      \"last_name\": \"Tremblay\",\n      \"phone\": \"+15145551234\",\n      \"company\": \"Acme Inc.\",\n      \"deal_value\": 2500\n    },\n    {\n      \"email\": \"morgan@example.com\",\n      \"first_name\": \"Morgan\",\n      \"last_name\": \"Bélanger\",\n      \"company\": \"Example Inc.\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"idempotency_error\",\n    \"code\": \"idempotency_conflict\",\n    \"message\": \"Une requête avec cette Idempotency-Key existe avec un payload différent.\",\n    \"hint\": \"Utilise une nouvelle Idempotency-Key, ou rejoue la requête originale à l'identique.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/conventions#idempotency\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"idempotency_key\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n      \"original_request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T6\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "23a58dff-2c59-4acc-81e5-63f5cc0cc111",
              "name": "The `Content-Type` header is missing or not supported for this endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    "batch"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contacts\": [\n    {\n      \"email\": \"alex@example.com\",\n      \"first_name\": \"Alex\",\n      \"last_name\": \"Tremblay\",\n      \"phone\": \"+15145551234\",\n      \"company\": \"Acme Inc.\",\n      \"deal_value\": 2500\n    },\n    {\n      \"email\": \"morgan@example.com\",\n      \"first_name\": \"Morgan\",\n      \"last_name\": \"Bélanger\",\n      \"company\": \"Example Inc.\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unsupported Media Type",
              "code": 415,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_content_type\",\n    \"message\": \"Content-Type `text/plain` non supporté. Utilise `application/json`.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/conventions#content-type\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"received\": \"text/plain\",\n      \"expected\": [\n        \"application/json\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "3163e4e4-e5ab-4264-bcd9-6c9ed8610d94",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    "batch"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contacts\": [\n    {\n      \"email\": \"alex@example.com\",\n      \"first_name\": \"Alex\",\n      \"last_name\": \"Tremblay\",\n      \"phone\": \"+15145551234\",\n      \"company\": \"Acme Inc.\",\n      \"deal_value\": 2500\n    },\n    {\n      \"email\": \"morgan@example.com\",\n      \"first_name\": \"Morgan\",\n      \"last_name\": \"Bélanger\",\n      \"company\": \"Example Inc.\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "992aebfa-79c3-4ae4-9dd1-c00cdcfb8884",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "contacts",
                    "batch"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contacts\": [\n    {\n      \"email\": \"alex@example.com\",\n      \"first_name\": \"Alex\",\n      \"last_name\": \"Tremblay\",\n      \"phone\": \"+15145551234\",\n      \"company\": \"Acme Inc.\",\n      \"deal_value\": 2500\n    },\n    {\n      \"email\": \"morgan@example.com\",\n      \"first_name\": \"Morgan\",\n      \"last_name\": \"Bélanger\",\n      \"company\": \"Example Inc.\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "1f0b259b-3d54-4404-a26f-11397df36478",
      "name": "Conversations",
      "description": {
        "content": "Unified conversation threads (chat, SMS, call, email)",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "2c0677de-c1bf-469d-bbf8-47606668d72e",
          "name": "List conversations",
          "request": {
            "name": "List conversations",
            "description": {
              "content": "Returns a paginated list of the account's conversations (chat threads)\n(cursor v2). Stable sort: `created_at DESC, id DESC`.\n\nA conversation groups a visitor's messages with an agent\n(AI or human) under the calling account. Threads are created and\nmessages are sent from the front end / chat SDK — the public\nAPI is read-only.\n\n### Filters\n\n- `?agent_slug` — exact match on the AI agent replying in the thread.\n- `?agent_identity_id` — exact match on the thread's specific AI agent\n  (an account can have several chatbots).\n- `?source` — exact match on the thread source (URL, funnel\n  label, `widget`, etc.).\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "conversations"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "cursor",
                  "value": "<string,null>",
                  "description": "Opaque pagination cursor — pass the `pagination.next_cursor` value from the previous page."
                },
                {
                  "disabled": false,
                  "key": "limit",
                  "value": "20",
                  "description": "Maximum number of results per page (default 20, max 100). Above that → 400 invalid_request."
                },
                {
                  "disabled": false,
                  "key": "created_after",
                  "value": "<dateTime>",
                  "description": "Filter — only resources created after this date (inclusive)."
                },
                {
                  "disabled": false,
                  "key": "created_before",
                  "value": "<dateTime>",
                  "description": "Filter — only resources created before this date (inclusive)."
                },
                {
                  "disabled": false,
                  "key": "agent_slug",
                  "value": "<string>",
                  "description": "AI agent slug — exact match on the threads this agent serves."
                },
                {
                  "disabled": false,
                  "key": "agent_identity_id",
                  "value": "<uuid>",
                  "description": "Identifier of the specific AI agent — exact match on the threads it serves."
                },
                {
                  "disabled": false,
                  "key": "source",
                  "value": "<string>",
                  "description": "Thread source — exact match (URL, funnel label, `widget`, etc.)."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "57f8914e-9669-4aec-9a91-9c11ee81c9cf",
              "name": "Paginated list of conversations.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "conversations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "agent_slug",
                      "value": "<string>"
                    },
                    {
                      "key": "agent_identity_id",
                      "value": "<uuid>"
                    },
                    {
                      "key": "source",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": [\n    {\n      \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n      \"first_name\": \"Alex\",\n      \"last_name\": \"Tremblay\",\n      \"email\": \"alex@example.com\",\n      \"phone\": \"+15145551234\",\n      \"agent_slug\": \"support-ventes\",\n      \"agent_identity_id\": \"2c7d1e4a-5b6f-4a8c-9d0e-1f2a3b4c5d6e\",\n      \"source\": \"widget\",\n      \"message_count\": 12,\n      \"last_message_at\": \"2026-05-04T12:34:56.789Z\",\n      \"contact_id\": null,\n      \"created_at\": \"2026-05-04T10:00:00.000Z\",\n      \"updated_at\": \"2026-05-04T12:34:56.789Z\"\n    }\n  ],\n  \"pagination\": {\n    \"next_cursor\": null,\n    \"has_more\": false,\n    \"limit\": 20,\n    \"cursor\": null,\n    \"total_count\": 1\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0e1768e6-134a-4314-a3b7-e3a0177a6ec0",
              "name": "The request is malformed (missing header, invalid JSON, invalid parameter).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "conversations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "agent_slug",
                      "value": "<string>"
                    },
                    {
                      "key": "agent_identity_id",
                      "value": "<uuid>"
                    },
                    {
                      "key": "source",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_request\",\n    \"message\": \"Le paramètre 'cursor' est invalide ou expiré.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#invalid_request\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"field\": \"cursor\",\n      \"reason\": \"malformed_base64\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7c788de0-7976-4776-aba3-132834bdfa34",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "conversations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "agent_slug",
                      "value": "<string>"
                    },
                    {
                      "key": "agent_identity_id",
                      "value": "<uuid>"
                    },
                    {
                      "key": "source",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9bfd1544-9362-44b6-b585-5cfe9b3edc06",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "conversations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "agent_slug",
                      "value": "<string>"
                    },
                    {
                      "key": "agent_identity_id",
                      "value": "<uuid>"
                    },
                    {
                      "key": "source",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "65273efb-b1b0-401c-a1cb-49c1a3d8b215",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "conversations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "agent_slug",
                      "value": "<string>"
                    },
                    {
                      "key": "agent_identity_id",
                      "value": "<uuid>"
                    },
                    {
                      "key": "source",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "bdc122a3-03f4-4ff2-87e8-20b654b04cc9",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "conversations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "agent_slug",
                      "value": "<string>"
                    },
                    {
                      "key": "agent_identity_id",
                      "value": "<uuid>"
                    },
                    {
                      "key": "source",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "1b7fab2c-9709-4f96-bc02-c64f8d17b0cb",
          "name": "Retrieve a conversation",
          "request": {
            "name": "Retrieve a conversation",
            "description": {
              "content": "Returns a conversation's metadata by its ID. To\nretrieve the individual messages, use\n`GET /v1/conversations/{id}/messages`.\n\nIf the conversation belongs to another account (or doesn't exist),\nreturns `404 resource_not_found` — tenant isolation hides\nthe existence of conversations outside the calling account.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "conversations",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<uuid>",
                  "key": "id",
                  "description": "(Required) UUID of the resource."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "16834d9a-e4c2-4f26-9855-695e02c5b7f1",
              "name": "Conversation found.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "conversations",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"first_name\": \"Alex\",\n    \"last_name\": \"Tremblay\",\n    \"email\": \"alex@example.com\",\n    \"phone\": \"+15145551234\",\n    \"agent_slug\": \"support-ventes\",\n    \"source\": \"widget\",\n    \"message_count\": 12,\n    \"last_message_at\": \"2026-05-04T12:34:56.789Z\",\n    \"contact_id\": null,\n    \"created_at\": \"2026-05-04T10:00:00.000Z\",\n    \"updated_at\": \"2026-05-04T12:34:56.789Z\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "31dc35a7-575b-4780-91b8-06f4052e230f",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "conversations",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "033b0bf0-dbed-485e-b424-7523331abc9b",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "conversations",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "edfd5ee0-0094-485c-b753-f1983db5d619",
              "name": "The requested resource doesn't exist (or isn't within the tenant's scope).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "conversations",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"not_found_error\",\n    \"code\": \"resource_not_found\",\n    \"message\": \"Le contact demandé n'existe pas.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#resource_not_found\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7a506945-c120-4dce-854f-19de36e8f8ef",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "conversations",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "bb10f002-6e82-4e6b-9674-d025c72d657d",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "conversations",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "544f57a9-2819-447a-9fce-3ca3de687554",
          "name": "List a conversation's messages",
          "request": {
            "name": "List a conversation's messages",
            "description": {
              "content": "Returns a paginated list of a conversation's messages in\n**chronological reading order** (`created_at ASC, id ASC`),\nwith an `id` tiebreaker to prevent duplicates or skipped rows between\ntwo pages when several messages share the same millisecond.\n\nThis sort direction (ASC) is the reverse of the other\nv2 list endpoints (DESC) — a conversation reads naturally\nin the chronological order of the exchange.\n\nEach message tells you who wrote it (`author_kind`): the visitor,\nthe AI agent, or a sales rep on the team who replied from the Inbox\n(`author_name` then holds their first name).\n\nIf the conversation belongs to another account (or doesn't exist),\nreturns `404 resource_not_found`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "conversations",
                ":id",
                "messages"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "cursor",
                  "value": "<string,null>",
                  "description": "Opaque pagination cursor — pass the `pagination.next_cursor` value from the previous page."
                },
                {
                  "disabled": false,
                  "key": "limit",
                  "value": "20",
                  "description": "Maximum number of results per page (default 20, max 100). Above that → 400 invalid_request."
                }
              ],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<uuid>",
                  "key": "id",
                  "description": "(Required) UUID of the resource."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "564cb405-1303-491c-b295-aff826d151ea",
              "name": "Paginated list of messages (chronological order).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "conversations",
                    ":id",
                    "messages"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": [\n    {\n      \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n      \"role\": \"user\",\n      \"content\": \"Bonjour, j'aimerais en savoir plus sur vos services.\",\n      \"created_at\": \"2026-05-04T10:00:00.000Z\",\n      \"author_kind\": \"visitor\",\n      \"author_name\": null\n    },\n    {\n      \"id\": \"9a4c2b3d-0e5f-5a6b-c7d8-e9f0a1b2c3d4\",\n      \"role\": \"assistant\",\n      \"content\": \"Bonjour Alex ! Avec plaisir — quel besoin cherchez-vous à résoudre ?\",\n      \"created_at\": \"2026-05-04T10:00:05.000Z\",\n      \"author_kind\": \"agent\",\n      \"author_name\": null\n    },\n    {\n      \"id\": \"0b5d3c4e-1f6a-4b7c-8d9e-f0a1b2c3d4e5\",\n      \"role\": \"assistant\",\n      \"content\": \"Bonjour Alex, ici Marie de l'équipe. Je vous appelle demain ?\",\n      \"created_at\": \"2026-05-04T10:12:00.000Z\",\n      \"author_kind\": \"human\",\n      \"author_name\": \"Marie\"\n    }\n  ],\n  \"pagination\": {\n    \"next_cursor\": null,\n    \"has_more\": false,\n    \"limit\": 20,\n    \"cursor\": null,\n    \"total_count\": 3\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "62d56444-6df7-49f7-8ee5-be7b933d2dab",
              "name": "The request is malformed (missing header, invalid JSON, invalid parameter).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "conversations",
                    ":id",
                    "messages"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_request\",\n    \"message\": \"Le paramètre 'cursor' est invalide ou expiré.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#invalid_request\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"field\": \"cursor\",\n      \"reason\": \"malformed_base64\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0a929f18-08a5-42b8-800c-3fa071e70bd4",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "conversations",
                    ":id",
                    "messages"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2cb8b6c5-830b-4055-a9d6-831004c383b6",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "conversations",
                    ":id",
                    "messages"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "5d410c57-93f0-4e8e-88f5-18cfff5e831d",
              "name": "The requested resource doesn't exist (or isn't within the tenant's scope).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "conversations",
                    ":id",
                    "messages"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"not_found_error\",\n    \"code\": \"resource_not_found\",\n    \"message\": \"Le contact demandé n'existe pas.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#resource_not_found\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "99deeabe-0b89-4896-9447-52a145454b39",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "conversations",
                    ":id",
                    "messages"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "3644d908-2a06-4995-bca4-e90621940c44",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "conversations",
                    ":id",
                    "messages"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "33d96f77-bd88-425f-a9f0-c3d5a0678ee8",
      "name": "Bookings",
      "description": {
        "content": "Calendar bookings",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "c0dcc74b-ff8e-477f-a4f1-8305960582a8",
          "name": "List bookings in the schedule",
          "request": {
            "name": "List bookings in the schedule",
            "description": {
              "content": "Returns the paginated list (cursor v2) of bookings in the schedule of\nthe key's account: all its calendars, all its hosts. Bookings\narchived from the dashboard are excluded. Stable sort\n`start_datetime DESC, id DESC` — the furthest-out bookings first,\nthen the history.\n\n### Filters\n\n- `?from` (ISO 8601) — `start_datetime >= from`\n- `?to` (ISO 8601) — `start_datetime <= to`\n- `?status` — `confirmed`, `cancelled`, `completed`, or `no_show`\n- `?event_type_id` — a calendar of the account\n- `?contact_id` — a contact of the account\n\nAn unreadable filter is rejected with `400 validation_error`, with the\nfield and the reason (`invalid_datetime`, `invalid_value`,\n`invalid_format`); an invalid cursor or limit, `400 invalid_request`.\nAn `event_type_id` or a `contact_id` from another account returns an\nempty list.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "bookings"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "cursor",
                  "value": "<string,null>",
                  "description": "Opaque pagination cursor — pass the `pagination.next_cursor` value from the previous page."
                },
                {
                  "disabled": false,
                  "key": "limit",
                  "value": "20",
                  "description": "Maximum number of results per page (default 20, max 100). Above that → 400 invalid_request."
                },
                {
                  "disabled": false,
                  "key": "from",
                  "value": "<dateTime>",
                  "description": "Only bookings where `start_datetime >= from`."
                },
                {
                  "disabled": false,
                  "key": "to",
                  "value": "<dateTime>",
                  "description": "Only bookings where `start_datetime <= to`."
                },
                {
                  "disabled": false,
                  "key": "status",
                  "value": "<string>",
                  "description": "Exact match on status."
                },
                {
                  "disabled": false,
                  "key": "event_type_id",
                  "value": "<uuid>",
                  "description": "Only bookings on this calendar."
                },
                {
                  "disabled": false,
                  "key": "contact_id",
                  "value": "<uuid>",
                  "description": "Only bookings for this contact."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "161d3334-c7f3-42c0-b49c-654c516a7c9d",
              "name": "Paginated list of bookings.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "from",
                      "value": "<dateTime>"
                    },
                    {
                      "key": "to",
                      "value": "<dateTime>"
                    },
                    {
                      "key": "status",
                      "value": "<string>"
                    },
                    {
                      "key": "event_type_id",
                      "value": "<uuid>"
                    },
                    {
                      "key": "contact_id",
                      "value": "<uuid>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": [\n    {\n      \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n      \"event_type_id\": \"2b3c4d5e-6f7a-4b9c-8d1e-2f3a4b5c6d7e\",\n      \"contact_id\": \"0a1b2c3d-4e5f-4a7b-8c9d-0e1f2a3b4c5d\",\n      \"host_id\": \"5c6d7e8f-9a0b-4c2d-8e4f-5a6b7c8d9e0f\",\n      \"guest_name\": \"Alex Tremblay\",\n      \"guest_email\": \"alex@example.com\",\n      \"guest_phone\": \"+15145551234\",\n      \"start_datetime\": \"2026-11-10T15:00:00+00:00\",\n      \"end_datetime\": \"2026-11-10T15:30:00+00:00\",\n      \"timezone\": \"America/Montreal\",\n      \"status\": \"confirmed\",\n      \"source\": \"booking_page\",\n      \"notes\": null,\n      \"meeting_link\": \"https://meet.google.com/abc-defg-hij\",\n      \"cancelled_at\": null,\n      \"cancel_reason\": null,\n      \"created_at\": \"2026-11-04T10:00:00+00:00\",\n      \"updated_at\": null\n    }\n  ],\n  \"pagination\": {\n    \"next_cursor\": null,\n    \"has_more\": false,\n    \"limit\": 20,\n    \"cursor\": null,\n    \"total_count\": 1\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "948d40c2-e4bb-475c-9bda-5f44852997cc",
              "name": "The request is malformed (missing header, invalid JSON, invalid parameter).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "from",
                      "value": "<dateTime>"
                    },
                    {
                      "key": "to",
                      "value": "<dateTime>"
                    },
                    {
                      "key": "status",
                      "value": "<string>"
                    },
                    {
                      "key": "event_type_id",
                      "value": "<uuid>"
                    },
                    {
                      "key": "contact_id",
                      "value": "<uuid>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_request\",\n    \"message\": \"Le paramètre 'cursor' est invalide ou expiré.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#invalid_request\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"field\": \"cursor\",\n      \"reason\": \"malformed_base64\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "daf794fa-5a1e-4c62-b807-7b042eb82963",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "from",
                      "value": "<dateTime>"
                    },
                    {
                      "key": "to",
                      "value": "<dateTime>"
                    },
                    {
                      "key": "status",
                      "value": "<string>"
                    },
                    {
                      "key": "event_type_id",
                      "value": "<uuid>"
                    },
                    {
                      "key": "contact_id",
                      "value": "<uuid>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7f0258ee-0336-408b-a415-768bdb489f35",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "from",
                      "value": "<dateTime>"
                    },
                    {
                      "key": "to",
                      "value": "<dateTime>"
                    },
                    {
                      "key": "status",
                      "value": "<string>"
                    },
                    {
                      "key": "event_type_id",
                      "value": "<uuid>"
                    },
                    {
                      "key": "contact_id",
                      "value": "<uuid>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "650bdcf2-ef6c-4001-81c9-388dd6b1d1c3",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "from",
                      "value": "<dateTime>"
                    },
                    {
                      "key": "to",
                      "value": "<dateTime>"
                    },
                    {
                      "key": "status",
                      "value": "<string>"
                    },
                    {
                      "key": "event_type_id",
                      "value": "<uuid>"
                    },
                    {
                      "key": "contact_id",
                      "value": "<uuid>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2cadf954-afcd-4936-ac03-de09fbee3a06",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "from",
                      "value": "<dateTime>"
                    },
                    {
                      "key": "to",
                      "value": "<dateTime>"
                    },
                    {
                      "key": "status",
                      "value": "<string>"
                    },
                    {
                      "key": "event_type_id",
                      "value": "<uuid>"
                    },
                    {
                      "key": "contact_id",
                      "value": "<uuid>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "b0632a5b-e527-4519-bf8c-a96c2fd69515",
          "name": "Book an appointment",
          "request": {
            "name": "Book an appointment",
            "description": {
              "content": "Books an appointment in the account's schedule, on one of its\ncalendars, through the same service as the booking page and the\ndashboard. The calendar's rules apply: its active hosts, their hours\nand their Google Calendar, the booking window, the slot cadence, the\ndaily maximum, group sessions, required questions, the access rule,\nand a single upcoming booking per contact on this calendar. The\nrequested time is honored or rejected with its reason — never\nreplaced with another. The duration is the calendar's; the host\nreceives their notification and the event is added to their calendar\nas for any booking.\n\nEach successful call creates a booking: don't replay a call that\nsucceeded.\n\n### Rejections\n\nThe `details.reason` field states why, in a stable way:\n\n| Status | `code` | `details.reason` |\n|---|---|---|\n| 400 | `validation_error` | `slot_in_past`, `outside_window`, `off_cadence` (`details.field = \"start_datetime\"`), `contact_or_guest_required`, `contact_without_email`, or the code of the failing question (`details.field = \"form_responses.<id>\"`, `details.questions`: the calendar's questions) |\n| 404 | `resource_not_found` | — (`details.field`: `event_type_id`, `contact_id`, or `host_id`) |\n| 409 | `duplicate_resource` | `already_booked` (`details.existing_booking_id`) |\n| 422 | `business_rule_violation` | `calendar_without_hosts`, `host_not_on_calendar`, `host_unavailable` (`details.causes`), `slot_unavailable`, `contact_archived`, `lead_not_qualified` |\n| 503 | `service_unavailable` | — (retry after `Retry-After`) |\n\nA field format error (`400 validation_error`) carries `details` as a\nlist `[{ field, reason }]`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "bookings"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"event_type_id\": \"<uuid>\",\n  \"start_datetime\": \"<dateTime>\",\n  \"contact_id\": \"<uuid>\",\n  \"guest_name\": \"<string>\",\n  \"guest_email\": \"<email>\",\n  \"guest_phone\": \"<string,null>\",\n  \"host_id\": \"<uuid>\",\n  \"timezone\": \"<string,null>\",\n  \"notes\": \"<string,null>\",\n  \"form_responses\": {\n    \"key_0\": {\n      \"value\": \"<string>\"\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "04f56337-fd4f-4616-b090-e4370e4b690f",
              "name": "Booking created.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event_type_id\": \"2b3c4d5e-6f7a-4b9c-8d1e-2f3a4b5c6d7e\",\n  \"start_datetime\": \"2026-11-10T10:00:00-05:00\",\n  \"contact_id\": \"0a1b2c3d-4e5f-4a7b-8c9d-0e1f2a3b4c5d\",\n  \"notes\": \"Premier rendez-vous découverte\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"event_type_id\": \"2b3c4d5e-6f7a-4b9c-8d1e-2f3a4b5c6d7e\",\n    \"contact_id\": \"0a1b2c3d-4e5f-4a7b-8c9d-0e1f2a3b4c5d\",\n    \"host_id\": \"5c6d7e8f-9a0b-4c2d-8e4f-5a6b7c8d9e0f\",\n    \"guest_name\": \"Alex Tremblay\",\n    \"guest_email\": \"alex@example.com\",\n    \"guest_phone\": \"+15145551234\",\n    \"start_datetime\": \"2026-11-10T15:00:00+00:00\",\n    \"end_datetime\": \"2026-11-10T15:30:00+00:00\",\n    \"timezone\": \"America/Montreal\",\n    \"status\": \"confirmed\",\n    \"source\": \"api\",\n    \"notes\": \"Premier rendez-vous découverte\",\n    \"meeting_link\": \"https://meet.google.com/abc-defg-hij\",\n    \"cancelled_at\": null,\n    \"cancel_reason\": null,\n    \"created_at\": \"2026-11-04T10:00:00+00:00\",\n    \"updated_at\": null\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "594dc04b-80bd-480d-9815-669aab7e47d6",
              "name": "Parameter or body validation failed.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event_type_id\": \"2b3c4d5e-6f7a-4b9c-8d1e-2f3a4b5c6d7e\",\n  \"start_datetime\": \"2026-11-10T10:00:00-05:00\",\n  \"contact_id\": \"0a1b2c3d-4e5f-4a7b-8c9d-0e1f2a3b4c5d\",\n  \"notes\": \"Premier rendez-vous découverte\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"validation_error\",\n    \"message\": \"Le champ 'email' est requis.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#validation_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"validation_errors\": [\n        {\n          \"path\": \"/email\",\n          \"reason\": \"required\"\n        }\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "897d6f9e-ba5c-408a-9692-d9e68e62e4d3",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event_type_id\": \"2b3c4d5e-6f7a-4b9c-8d1e-2f3a4b5c6d7e\",\n  \"start_datetime\": \"2026-11-10T10:00:00-05:00\",\n  \"contact_id\": \"0a1b2c3d-4e5f-4a7b-8c9d-0e1f2a3b4c5d\",\n  \"notes\": \"Premier rendez-vous découverte\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "fffbe8cd-a76a-4da8-b984-5bc1a0464ea0",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event_type_id\": \"2b3c4d5e-6f7a-4b9c-8d1e-2f3a4b5c6d7e\",\n  \"start_datetime\": \"2026-11-10T10:00:00-05:00\",\n  \"contact_id\": \"0a1b2c3d-4e5f-4a7b-8c9d-0e1f2a3b4c5d\",\n  \"notes\": \"Premier rendez-vous découverte\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ea737d48-a0ea-49e8-9340-afb6950302cb",
              "name": "The requested resource doesn't exist (or isn't within the tenant's scope).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event_type_id\": \"2b3c4d5e-6f7a-4b9c-8d1e-2f3a4b5c6d7e\",\n  \"start_datetime\": \"2026-11-10T10:00:00-05:00\",\n  \"contact_id\": \"0a1b2c3d-4e5f-4a7b-8c9d-0e1f2a3b4c5d\",\n  \"notes\": \"Premier rendez-vous découverte\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"not_found_error\",\n    \"code\": \"resource_not_found\",\n    \"message\": \"Le contact demandé n'existe pas.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#resource_not_found\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "6890708f-d9d6-479b-b70a-567eb369bb35",
              "name": "The lead already has an upcoming booking on this calendar\n(`duplicate_resource`, reason `already_booked`, with\n`details.existing_booking_id`).\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event_type_id\": \"2b3c4d5e-6f7a-4b9c-8d1e-2f3a4b5c6d7e\",\n  \"start_datetime\": \"2026-11-10T10:00:00-05:00\",\n  \"contact_id\": \"0a1b2c3d-4e5f-4a7b-8c9d-0e1f2a3b4c5d\",\n  \"notes\": \"Premier rendez-vous découverte\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"conflict_error\",\n    \"code\": \"duplicate_resource\",\n    \"message\": \"Une ressource avec cette valeur unique existe déjà.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#duplicate_resource\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"reason\": \"already_booked\",\n      \"existing_booking_id\": \"7d8e9f0a-1b2c-4d4e-8f6a-7b8c9d0e1f2a\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "96b352a7-f5ea-4880-8497-90f6a2499f2f",
              "name": "The `Content-Type` header is missing or not supported for this endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event_type_id\": \"2b3c4d5e-6f7a-4b9c-8d1e-2f3a4b5c6d7e\",\n  \"start_datetime\": \"2026-11-10T10:00:00-05:00\",\n  \"contact_id\": \"0a1b2c3d-4e5f-4a7b-8c9d-0e1f2a3b4c5d\",\n  \"notes\": \"Premier rendez-vous découverte\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unsupported Media Type",
              "code": 415,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_content_type\",\n    \"message\": \"Content-Type `text/plain` non supporté. Utilise `application/json`.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/conventions#content-type\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"received\": \"text/plain\",\n      \"expected\": [\n        \"application/json\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "a1555faf-54c9-4f4f-9cdb-3d3e1ba1e487",
              "name": "The requested time or host can't be honored: calendar without an\nactive host (`calendar_without_hosts`), host who isn't a host of this\ncalendar (`host_not_on_calendar`), host unavailable\n(`host_unavailable`, causes in `details.causes`:\n`outside_window`, `outside_hours`, `other_booking`,\n`blocked_time`, `google_busy`, `daily_max`), slot taken or\nfull (`slot_unavailable`), archived contact (`contact_archived`),\nlead excluded by the calendar's access rule or disqualified\n(`lead_not_qualified`).\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event_type_id\": \"2b3c4d5e-6f7a-4b9c-8d1e-2f3a4b5c6d7e\",\n  \"start_datetime\": \"2026-11-10T10:00:00-05:00\",\n  \"contact_id\": \"0a1b2c3d-4e5f-4a7b-8c9d-0e1f2a3b4c5d\",\n  \"notes\": \"Premier rendez-vous découverte\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"business_rule_error\",\n    \"code\": \"business_rule_violation\",\n    \"message\": \"Une règle métier empêche cette opération.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#business_rule_violation\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"reason\": \"host_unavailable\",\n      \"causes\": [\n        \"google_busy\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d60d1af6-f91f-4dd2-94fc-c6842b950358",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event_type_id\": \"2b3c4d5e-6f7a-4b9c-8d1e-2f3a4b5c6d7e\",\n  \"start_datetime\": \"2026-11-10T10:00:00-05:00\",\n  \"contact_id\": \"0a1b2c3d-4e5f-4a7b-8c9d-0e1f2a3b4c5d\",\n  \"notes\": \"Premier rendez-vous découverte\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "13178bfe-1aff-42fc-8138-328ea74f2fdb",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event_type_id\": \"2b3c4d5e-6f7a-4b9c-8d1e-2f3a4b5c6d7e\",\n  \"start_datetime\": \"2026-11-10T10:00:00-05:00\",\n  \"contact_id\": \"0a1b2c3d-4e5f-4a7b-8c9d-0e1f2a3b4c5d\",\n  \"notes\": \"Premier rendez-vous découverte\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0bb38d55-1a69-48f0-b189-cad413712564",
              "name": "Service temporarily unavailable (maintenance, external dependency down, degraded infrastructure).\nClients should retry with exponential backoff.\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event_type_id\": \"2b3c4d5e-6f7a-4b9c-8d1e-2f3a4b5c6d7e\",\n  \"start_datetime\": \"2026-11-10T10:00:00-05:00\",\n  \"contact_id\": \"0a1b2c3d-4e5f-4a7b-8c9d-0e1f2a3b4c5d\",\n  \"notes\": \"Premier rendez-vous découverte\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"service_unavailable\",\n    \"message\": \"Service temporairement indisponible. Réessaie dans quelques secondes.\",\n    \"hint\": \"Implémente un backoff exponentiel et respecte le header `Retry-After`.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#service_unavailable\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"retry_after_seconds\": 30\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "011c80a3-2995-4a4c-b5c8-c466426f7335",
          "name": "Cancel a booking",
          "request": {
            "name": "Cancel a booking",
            "description": {
              "content": "**Soft cancel** — the booking is not deleted: its `status` changes\nto `cancelled` and `cancelled_at` is timestamped, like a\ncancellation made in the dashboard. The event is removed from the\nhost's calendar, the host is notified, and the cancellation is\nrecorded as made by one of your team's integrations. The `200`\nresponse returns these 3 fields (not `204 No Content`).\n\nOnly a `confirmed` booking can be cancelled. A booking that is\nalready cancelled returns `422 business_rule_violation` (reason\n`already_cancelled`); a booking that was held or marked as a no-show,\n`422` (reason `booking_not_cancellable`). A booking from another\naccount is not found (`404`).\n\nTo change the time, cancel and book again, or reschedule from the\ndashboard — there is no `PATCH`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "bookings",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<uuid>",
                  "key": "id",
                  "description": "(Required) UUID of the resource."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "DELETE",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "caa0a27c-3f2e-4a7b-863d-e596d0089518",
              "name": "Booking cancelled. Returns the cancellation status and timestamp.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"status\": \"cancelled\",\n    \"cancelled_at\": \"2026-11-04T12:00:00+00:00\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "43d8b97e-0310-4a4d-9c2c-dce21f1acba5",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "28ab7099-06ea-40f2-b98c-b41b2b331d40",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2b60d68c-3947-4f37-887f-e9fb83380344",
              "name": "The requested resource doesn't exist (or isn't within the tenant's scope).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"not_found_error\",\n    \"code\": \"resource_not_found\",\n    \"message\": \"Le contact demandé n'existe pas.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#resource_not_found\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f0fe2a29-ef4b-413c-96ca-160bcbedf8cb",
              "name": "The booking is already cancelled (`already_cancelled`), or it was\nheld or marked as a no-show (`booking_not_cancellable`).\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"business_rule_error\",\n    \"code\": \"business_rule_violation\",\n    \"message\": \"Une règle métier empêche cette opération.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#business_rule_violation\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"reason\": \"already_cancelled\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "766e3273-28eb-4ec3-9ca0-224623bb12cd",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "377cf450-6d9e-4078-9e1a-d2cdf548336c",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "bookings",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "dcf4a94c-fcc9-4743-b63b-e2a2ff595b8b",
      "name": "Quotes",
      "description": {
        "content": "Quotes and sales proposals",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "9592f178-176e-444e-a251-d5285b570c13",
          "name": "List quotes",
          "request": {
            "name": "List quotes",
            "description": {
              "content": "Returns the paginated list of the account's quotes (cursor v2). Stable sort\n`created_at DESC, id DESC`.\n\nArchived quotes (`archived_at IS NOT NULL`) are excluded by\ndefault — the public API does not expose them. To retrieve an archived\nquote, use the dashboard.\n\n### Filters\n\n- `?status` — exact match (`draft`, `sent`, `signed`, `cancelled`)\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "quotes"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "cursor",
                  "value": "<string,null>",
                  "description": "Opaque pagination cursor — pass the `pagination.next_cursor` value from the previous page."
                },
                {
                  "disabled": false,
                  "key": "limit",
                  "value": "20",
                  "description": "Maximum number of results per page (default 20, max 100). Above that → 400 invalid_request."
                },
                {
                  "disabled": false,
                  "key": "created_after",
                  "value": "<dateTime>",
                  "description": "Filter — only resources created after this date (inclusive)."
                },
                {
                  "disabled": false,
                  "key": "created_before",
                  "value": "<dateTime>",
                  "description": "Filter — only resources created before this date (inclusive)."
                },
                {
                  "disabled": false,
                  "key": "status",
                  "value": "<string>",
                  "description": "Exact match on the quote lifecycle."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "4faac711-59c0-48f7-80f3-a9040351ae45",
              "name": "Paginated list of quotes.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "status",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": [\n    {\n      \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n      \"client_id\": \"0a1b2c3d-4e5f-6a7b-8c9d-0e1f2a3b4c5d\",\n      \"quote_number\": \"DEV-2026-0042\",\n      \"status\": \"draft\",\n      \"prospect_name\": \"Alex Tremblay\",\n      \"prospect_email\": \"alex@example.com\",\n      \"prospect_phone\": \"+15145551234\",\n      \"prospect_company\": \"Acme Inc.\",\n      \"prospect_address\": null,\n      \"subtotal\": null,\n      \"tps_amount\": null,\n      \"tvq_amount\": null,\n      \"total\": null,\n      \"valid_until\": \"2026-06-30\",\n      \"payment_terms\": \"Net 30\",\n      \"sent_at\": null,\n      \"first_viewed_at\": null,\n      \"signed_at\": null,\n      \"sales_rep_id\": null,\n      \"created_at\": \"2026-05-04T10:00:00.000Z\",\n      \"updated_at\": \"2026-05-04T10:00:00.000Z\"\n    }\n  ],\n  \"pagination\": {\n    \"next_cursor\": null,\n    \"has_more\": false,\n    \"limit\": 20,\n    \"cursor\": null,\n    \"total_count\": 1\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "aa5c0840-0f1c-456c-a158-47ebdc7985fa",
              "name": "The request is malformed (missing header, invalid JSON, invalid parameter).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "status",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_request\",\n    \"message\": \"Le paramètre 'cursor' est invalide ou expiré.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#invalid_request\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"field\": \"cursor\",\n      \"reason\": \"malformed_base64\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e43885a9-3f2a-4e5c-b520-e86cceb5c351",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "status",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "492568de-824d-49d1-895d-f16f417e80d1",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "status",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "6044a5f5-d3a3-4bbe-b335-bbe5796172e8",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "status",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "40c062fd-7e2b-42f2-bddc-aa34ea4609bc",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "status",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "bf182fe4-0e9d-4b25-82a6-c8a1fce3cbde",
          "name": "Create a quote",
          "request": {
            "name": "Create a quote",
            "description": {
              "content": "Creates a draft quote (`status=\"draft\"`) through the same creation\npath as the dashboard: Capturia assigns the number\n(`quote_number`, the account's sequence, never a duplicate) and applies the\naccount's defaults (validity, payment terms, tax profile,\ndeposit policy). A provided `quote_number` is rejected\n(`400 validation_error`, reason `read_only`).\n\n`contact_id` links the quote to its contact (`/v1/contacts`): each\nomitted `prospect_*` field is read from the contact, and each field you provide\ntakes precedence. `line_items` writes the line items in the same operation; the\nserver computes the amounts. To send the quote to the\nlead, use `POST /v1/quotes/{id}/send`.\n\n### Idempotency\n\nThe `Idempotency-Key` header is **optional but recommended**: a\nretry after a timeout never creates a second quote. A\nsecond request with the same key and the same payload returns the original\nresponse; the same key with a different payload returns\n`409 idempotency_conflict`. A rejection (400, 403, 404) is not\nstored: the key remains usable.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "quotes"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                "key": "Idempotency-Key",
                "value": "<string>"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"contact_id\": \"<string,null-uuid>\",\n  \"prospect_name\": \"<string,null>\",\n  \"prospect_email\": \"<string,null-email>\",\n  \"prospect_phone\": \"<string,null>\",\n  \"prospect_company\": \"<string,null>\",\n  \"prospect_address\": \"<string,null>\",\n  \"language\": \"<string>\",\n  \"valid_until\": \"<string,null-date>\",\n  \"payment_terms\": \"<string,null>\",\n  \"line_items\": [\n    {\n      \"description\": \"<string>\",\n      \"quantity\": \"<number>\",\n      \"unit_price\": \"<number>\",\n      \"unit_label\": \"<string,null>\",\n      \"is_taxable\": \"<boolean>\",\n      \"catalog_item_id\": \"<string,null-uuid>\"\n    },\n    {\n      \"description\": \"<string>\",\n      \"quantity\": \"<number>\",\n      \"unit_price\": \"<number>\",\n      \"unit_label\": \"<string,null>\",\n      \"is_taxable\": \"<boolean>\",\n      \"catalog_item_id\": \"<string,null-uuid>\"\n    }\n  ],\n  \"internal_notes\": \"<string>\",\n  \"sales_rep_id\": \"<string,null-uuid>\",\n  \"tax_profile_id\": \"<string,null-uuid>\",\n  \"signature_payment_order\": \"<string>\",\n  \"tax_exempt_reason\": \"<string,null>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "e6aa5e06-4322-4f67-ad1d-633682e1c2f8",
              "name": "Quote created.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a\",\n  \"valid_until\": \"2026-06-30\",\n  \"payment_terms\": \"Net 30\",\n  \"line_items\": [\n    {\n      \"description\": \"Remplacement de la toiture\",\n      \"quantity\": 1,\n      \"unit_price\": 9500\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"client_id\": \"0a1b2c3d-4e5f-6a7b-8c9d-0e1f2a3b4c5d\",\n    \"quote_number\": \"DEV-2026-0042\",\n    \"status\": \"draft\",\n    \"prospect_name\": \"Alex Tremblay\",\n    \"prospect_email\": \"alex@example.com\",\n    \"prospect_phone\": \"+15145551234\",\n    \"prospect_company\": \"Acme Inc.\",\n    \"prospect_address\": null,\n    \"subtotal\": null,\n    \"tps_amount\": null,\n    \"tvq_amount\": null,\n    \"total\": null,\n    \"valid_until\": \"2026-06-30\",\n    \"payment_terms\": \"Net 30\",\n    \"sent_at\": null,\n    \"first_viewed_at\": null,\n    \"signed_at\": null,\n    \"sales_rep_id\": null,\n    \"created_at\": \"2026-05-04T10:00:00.000Z\",\n    \"updated_at\": \"2026-05-04T10:00:00.000Z\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "c29572f0-f02c-49d4-902d-64ef1c331de9",
              "name": "Parameter or body validation failed.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a\",\n  \"valid_until\": \"2026-06-30\",\n  \"payment_terms\": \"Net 30\",\n  \"line_items\": [\n    {\n      \"description\": \"Remplacement de la toiture\",\n      \"quantity\": 1,\n      \"unit_price\": 9500\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"validation_error\",\n    \"message\": \"Le champ 'email' est requis.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#validation_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"validation_errors\": [\n        {\n          \"path\": \"/email\",\n          \"reason\": \"required\"\n        }\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "def53521-ffcc-4f79-b907-2eb7ccb07b03",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a\",\n  \"valid_until\": \"2026-06-30\",\n  \"payment_terms\": \"Net 30\",\n  \"line_items\": [\n    {\n      \"description\": \"Remplacement de la toiture\",\n      \"quantity\": 1,\n      \"unit_price\": 9500\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "40729cbe-02c1-4bfb-91f7-14686ead6a3f",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a\",\n  \"valid_until\": \"2026-06-30\",\n  \"payment_terms\": \"Net 30\",\n  \"line_items\": [\n    {\n      \"description\": \"Remplacement de la toiture\",\n      \"quantity\": 1,\n      \"unit_price\": 9500\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0f11f6bf-a967-43d5-a908-0ae26f79ba5a",
              "name": "A previous request with the same `Idempotency-Key` used a different payload,\nor is still being processed.\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a\",\n  \"valid_until\": \"2026-06-30\",\n  \"payment_terms\": \"Net 30\",\n  \"line_items\": [\n    {\n      \"description\": \"Remplacement de la toiture\",\n      \"quantity\": 1,\n      \"unit_price\": 9500\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"idempotency_error\",\n    \"code\": \"idempotency_conflict\",\n    \"message\": \"Une requête avec cette Idempotency-Key existe avec un payload différent.\",\n    \"hint\": \"Utilise une nouvelle Idempotency-Key, ou rejoue la requête originale à l'identique.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/conventions#idempotency\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"idempotency_key\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n      \"original_request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T6\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9f2e9c35-f938-42be-bff7-4d557735cb15",
              "name": "The `Content-Type` header is missing or not supported for this endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a\",\n  \"valid_until\": \"2026-06-30\",\n  \"payment_terms\": \"Net 30\",\n  \"line_items\": [\n    {\n      \"description\": \"Remplacement de la toiture\",\n      \"quantity\": 1,\n      \"unit_price\": 9500\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unsupported Media Type",
              "code": 415,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_content_type\",\n    \"message\": \"Content-Type `text/plain` non supporté. Utilise `application/json`.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/conventions#content-type\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"received\": \"text/plain\",\n      \"expected\": [\n        \"application/json\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e8e2251d-c7f8-455a-be6e-00758a407384",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a\",\n  \"valid_until\": \"2026-06-30\",\n  \"payment_terms\": \"Net 30\",\n  \"line_items\": [\n    {\n      \"description\": \"Remplacement de la toiture\",\n      \"quantity\": 1,\n      \"unit_price\": 9500\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "4ae93159-9b7a-4eb7-a6f2-c972c2a645b7",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a\",\n  \"valid_until\": \"2026-06-30\",\n  \"payment_terms\": \"Net 30\",\n  \"line_items\": [\n    {\n      \"description\": \"Remplacement de la toiture\",\n      \"quantity\": 1,\n      \"unit_price\": 9500\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "0df1c352-a29d-4c8a-a3d5-3f34e29d7c98",
          "name": "Update a quote",
          "request": {
            "name": "Update a quote",
            "description": {
              "content": "Updates the provided fields of the quote (omitted fields are kept).\nAt least one field must be provided, otherwise `400 no_fields`.\n\nAmounts (`subtotal`, `tps_amount`, `tvq_amount`, `total`) are\nnot editable via PATCH — they are computed server-side from the\nblocks (managed from the dashboard).\n\n`status` only accepts `declined` (the lead declined it) and\n`cancelled`: a quote moves to `sent` through `POST /v1/quotes/{id}/send`\n(the email goes out), to `viewed` and `signed` through the lead, and to\n`expired` through its validity date. A signed, paid, or already closed quote\ncan no longer be closed (`409 status_locked`). Closing must be done on its own:\n`status` combined with other fields returns `400 validation_error`\n(reason `exclusive_field`).\n\nArchived quotes (`archived_at IS NOT NULL`) cannot be\nmodified — returns `404 resource_not_found`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "quotes",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<uuid>",
                  "key": "id",
                  "description": "(Required) UUID of the resource."
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PATCH",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"prospect_name\": \"<string,null>\",\n  \"prospect_email\": \"<string,null-email>\",\n  \"prospect_phone\": \"<string,null>\",\n  \"prospect_company\": \"<string,null>\",\n  \"prospect_address\": \"<string,null>\",\n  \"valid_until\": \"<string,null-date>\",\n  \"payment_terms\": \"<string,null>\",\n  \"internal_notes\": \"<string,null>\",\n  \"sales_rep_id\": \"<string,null-uuid>\",\n  \"tax_profile_id\": \"<string,null-uuid>\",\n  \"payment_plan_type\": \"<string>\",\n  \"payment_deposit_type\": \"<string,null>\",\n  \"payment_deposit_value\": \"<number,null>\",\n  \"payment_installments_count\": \"<integer,null>\",\n  \"payment_interval_days\": \"<integer,null>\",\n  \"payment_execution_mode\": \"<string>\",\n  \"signature_payment_order\": \"<string>\",\n  \"tax_exempt_reason\": \"<string,null>\",\n  \"status\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "0266d20d-8008-40b1-ae7c-c7fc246b8eec",
              "name": "Quote updated.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"prospect_name\": \"Alexandre Tremblay\",\n  \"valid_until\": \"2026-07-31\",\n  \"payment_terms\": \"Net 60\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"client_id\": \"f176d19c-394c-f1f8-f0aa-953a27fc2b63\",\n    \"quote_number\": \"DEV-2026-0042\",\n    \"status\": \"draft\",\n    \"created_at\": \"2026-05-04T12:34:56.789Z\",\n    \"updated_at\": \"2026-05-04T12:34:56.789Z\",\n    \"prospect_name\": \"Alex Tremblay\",\n    \"prospect_email\": \"alex@example.com\",\n    \"prospect_phone\": \"+15145551234\",\n    \"prospect_company\": \"Acme Inc.\",\n    \"prospect_address\": \"string\",\n    \"subtotal\": 1000,\n    \"tps_amount\": 50,\n    \"tvq_amount\": 99.75,\n    \"total\": 1149.75,\n    \"tax_profile_id\": \"edc4bc78-f1ea-a915-f76b-a2fe44abf683\",\n    \"tax_exempt_reason\": \"string\",\n    \"valid_until\": \"2026-06-30\",\n    \"payment_terms\": \"string\",\n    \"payment_plan_type\": \"full\",\n    \"payment_deposit_type\": \"null\",\n    \"payment_deposit_value\": 445.3802530358597,\n    \"payment_installments_count\": 5072,\n    \"payment_interval_days\": 4443,\n    \"payment_execution_mode\": \"automatic\",\n    \"signature_payment_order\": \"signature_then_payment\",\n    \"sent_at\": \"1974-07-06T01:51:46.465Z\",\n    \"first_viewed_at\": \"1965-04-07T17:11:48.040Z\",\n    \"signed_at\": \"1970-04-01T02:06:01.167Z\",\n    \"converted_at\": \"2023-09-27T21:55:19.172Z\",\n    \"sales_rep_id\": \"4d100496-64bd-18a6-32ee-6fe300995350\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "17a93801-1cbc-4bfe-9440-4abcc35547ec",
              "name": "Parameter or body validation failed.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"prospect_name\": \"Alexandre Tremblay\",\n  \"valid_until\": \"2026-07-31\",\n  \"payment_terms\": \"Net 60\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"validation_error\",\n    \"message\": \"Le champ 'email' est requis.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#validation_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"validation_errors\": [\n        {\n          \"path\": \"/email\",\n          \"reason\": \"required\"\n        }\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "72417455-dd69-43e7-b44a-ead8761564bf",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"prospect_name\": \"Alexandre Tremblay\",\n  \"valid_until\": \"2026-07-31\",\n  \"payment_terms\": \"Net 60\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "cd8e6021-ad1c-4e27-9065-aa24a22356d6",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"prospect_name\": \"Alexandre Tremblay\",\n  \"valid_until\": \"2026-07-31\",\n  \"payment_terms\": \"Net 60\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "367a5816-d156-463c-92c4-a7fd81a959ff",
              "name": "The requested resource doesn't exist (or isn't within the tenant's scope).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"prospect_name\": \"Alexandre Tremblay\",\n  \"valid_until\": \"2026-07-31\",\n  \"payment_terms\": \"Net 60\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"not_found_error\",\n    \"code\": \"resource_not_found\",\n    \"message\": \"Le contact demandé n'existe pas.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#resource_not_found\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "481ff898-3d61-409d-b084-b90112e73cdf",
              "name": "The request is syntactically valid but violates a business rule.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"prospect_name\": \"Alexandre Tremblay\",\n  \"valid_until\": \"2026-07-31\",\n  \"payment_terms\": \"Net 60\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"business_rule_error\",\n    \"code\": \"business_rule_violation\",\n    \"message\": \"Impossible d'envoyer un devis déjà accepté.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#business_rule_violation\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"rule\": \"quote_already_accepted\",\n      \"current_state\": \"accepted\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "5107bf47-aac9-4f20-b0fe-05ad36a56d41",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"prospect_name\": \"Alexandre Tremblay\",\n  \"valid_until\": \"2026-07-31\",\n  \"payment_terms\": \"Net 60\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7a2a83ed-c49a-4737-9e2f-d6d7c774dd61",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"prospect_name\": \"Alexandre Tremblay\",\n  \"valid_until\": \"2026-07-31\",\n  \"payment_terms\": \"Net 60\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "f10ab79b-4f5f-494a-8a76-076b59c55156",
          "name": "Send a quote to the lead",
          "request": {
            "name": "Send a quote to the lead",
            "description": {
              "content": "Emails the quote to the lead, through the same service as the\ndashboard's “Send” button: sent from the assigned sales rep (otherwise\nfrom the business), with a link to the quote's public page, then\n`status=\"sent\"` and `sent_at` are set. Only a draft can be sent; nothing\ngoes out again for a quote that was already sent.\n\nA quote without a contact (lead entered without a contact) is\nfirst linked to the lead's contact: found by their email or\nphone number, otherwise created — never a duplicate. The email then opens\nits thread in the Inbox. The created contact stays in the API key's account,\nand its creation triggers the automations and CRM sync\nof a new contact.\n\n### Rejections\n\n- `409 already_signed`: the quote is signed.\n- `409 quote_cancelled`: the quote was cancelled.\n- `409 already_sent`: the quote was already sent.\n- `409 quote_status_changed`: the quote is no longer a draft (for example, it expired).\n- `409 send_in_progress`: a send of this quote is already in progress.\n- `409 send_outcome_unknown`: a previous send could not be confirmed; it is not retried.\n- `409 recipient_unsubscribed`: the lead unsubscribed.\n- `409 sender_unavailable`: the assigned sales rep has no valid sending address.\n- `422 no_prospect_email` / `422 invalid_prospect_email`: the lead's email is missing or invalid.\n- `422 unpriced_lines`, `422 untaxed_quote`, `422 deposit_not_payable`: content guard.\n\nNo body is required.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "quotes",
                ":id",
                "send"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<uuid>",
                  "key": "id",
                  "description": "(Required) UUID of the resource."
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "a1bc497b-af67-4a5a-ba14-9208f83e11d7",
              "name": "Quote sent to the lead.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes",
                    ":id",
                    "send"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"client_id\": \"0a1b2c3d-4e5f-6a7b-8c9d-0e1f2a3b4c5d\",\n    \"quote_number\": \"DEV-2026-0042\",\n    \"status\": \"sent\",\n    \"prospect_name\": \"Alex Tremblay\",\n    \"prospect_email\": \"alex@example.com\",\n    \"sent_at\": \"2026-05-04T12:00:00.000Z\",\n    \"created_at\": \"2026-05-04T10:00:00.000Z\",\n    \"updated_at\": \"2026-05-04T12:00:00.000Z\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d87e2647-2fa2-46f8-ae1c-bce42ab441cf",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes",
                    ":id",
                    "send"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d544c90e-7756-4bca-b268-5526b101de2b",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes",
                    ":id",
                    "send"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "588dc05c-5dc9-4603-b6f9-c4dd1b4ea66e",
              "name": "The requested resource doesn't exist (or isn't within the tenant's scope).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes",
                    ":id",
                    "send"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"not_found_error\",\n    \"code\": \"resource_not_found\",\n    \"message\": \"Le contact demandé n'existe pas.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#resource_not_found\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1f9bce63-49d4-421d-a84e-8daf4b42a57e",
              "name": "The request is syntactically valid but violates a business rule.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes",
                    ":id",
                    "send"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"business_rule_error\",\n    \"code\": \"business_rule_violation\",\n    \"message\": \"Impossible d'envoyer un devis déjà accepté.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#business_rule_violation\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"rule\": \"quote_already_accepted\",\n      \"current_state\": \"accepted\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9a2265db-4d0e-403b-90e1-5ece6f71dc23",
              "name": "The request is syntactically valid but violates a business rule.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes",
                    ":id",
                    "send"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"business_rule_error\",\n    \"code\": \"business_rule_violation\",\n    \"message\": \"Impossible d'envoyer un devis déjà accepté.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#business_rule_violation\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"rule\": \"quote_already_accepted\",\n      \"current_state\": \"accepted\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0d0c5c0c-c83a-4627-badb-fbf1c118c086",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes",
                    ":id",
                    "send"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "07ab552d-8a4a-450b-b1e4-b89e056cb036",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "quotes",
                    ":id",
                    "send"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "1807ea1b-bd25-42c4-ae86-d763e11dae15",
      "name": "Tags",
      "description": {
        "content": "Tags to categorize contacts",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "ac873995-de3d-43b3-8bba-f37c391da517",
          "name": "List tags",
          "request": {
            "name": "List tags",
            "description": {
              "content": "Returns the paginated list of the client's tags (cursor v2). Stable sort\n`name ASC, id ASC` — alphabetical order makes it easy to build\na selection UI. The `id ASC` tiebreaker guarantees a total order\nacross pages (names are unique within the account and case-sensitive).\n\n### Cursor sanitization\n\nSince `name` is user-controlled, the cursor encodes values with\nPostgREST escaping on the server — no action is required on your side.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "tags"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "cursor",
                  "value": "<string,null>",
                  "description": "Opaque pagination cursor — pass the `pagination.next_cursor` value from the previous page."
                },
                {
                  "disabled": false,
                  "key": "limit",
                  "value": "20",
                  "description": "Maximum number of results per page (default 20, max 100). Above that → 400 invalid_request."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "eae5290c-b806-4bc3-8b4e-1da9f835b9bf",
              "name": "Paginated list of tags.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "tags"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": [\n    {\n      \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n      \"name\": \"Lead chaud\",\n      \"color\": \"#ef4444\",\n      \"description\": \"Prospect avec budget confirmé et calendrier court.\",\n      \"category\": \"priority\",\n      \"system_key\": null,\n      \"created_at\": \"2026-05-04T10:00:00.000Z\"\n    },\n    {\n      \"id\": \"4c5d6e7f-8a9b-4c0d-9e1f-2a3b4c5d6e7f\",\n      \"name\": \"Campagne : PPC\",\n      \"color\": \"#8b5cf6\",\n      \"description\": null,\n      \"category\": null,\n      \"system_key\": \"campaign:pn:7d1e2f3a-4b5c-4d6e-8f9a-0b1c2d3e4f5a\",\n      \"created_at\": \"2026-05-04T09:45:00.000Z\"\n    },\n    {\n      \"id\": \"1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\",\n      \"name\": \"Restauration\",\n      \"color\": \"#3b82f6\",\n      \"description\": null,\n      \"category\": \"industry\",\n      \"system_key\": null,\n      \"created_at\": \"2026-05-04T09:30:00.000Z\"\n    }\n  ],\n  \"pagination\": {\n    \"next_cursor\": null,\n    \"has_more\": false,\n    \"limit\": 20,\n    \"cursor\": null,\n    \"total_count\": 3\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "37152d5f-1066-493b-a6bb-e67bb3d10111",
              "name": "The request is malformed (missing header, invalid JSON, invalid parameter).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "tags"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_request\",\n    \"message\": \"Le paramètre 'cursor' est invalide ou expiré.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#invalid_request\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"field\": \"cursor\",\n      \"reason\": \"malformed_base64\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e2eba69d-07fa-4096-b37d-4c084ea94494",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "tags"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7f2a9a72-1890-46cf-a343-f515af284ee1",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "tags"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "284bbef9-bf4b-47ef-a9a3-4b6a49f0c91f",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "tags"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "bd010915-cbac-48bb-8595-2697aee296b4",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "tags"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "031e5e35-fcde-46ce-bea0-d8bc9eda1ae1",
          "name": "Create a tag",
          "request": {
            "name": "Create a tag",
            "description": {
              "content": "Creates a new tag in the client's library. Only `name` is\nrequired — `color` defaults to `#6b7280` (neutral\ngray) if not provided. To attach the tag to an existing contact,\nuse `POST /v1/contacts/{id}/tags` with the identifier returned\nby this endpoint.\n\nThe name is unique within the account: a name that is already taken returns\n`409 duplicate_resource`. A name that starts with \"Campagne :\"\n(any casing and spacing) is reserved for campaign tags managed by\nCapturia and returns `400 validation_error`, with\n`details: { field: \"name\", reason: \"reserved_prefix\" }`. A missing\n`name` returns `400 validation_error` with\n`details: { field: \"name\", reason: \"required\" }`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "tags"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"<string>\",\n  \"color\": \"<string>\",\n  \"description\": \"<string>\",\n  \"category\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "a6f68ee1-1add-46f3-9baa-5e019f9ba07c",
              "name": "Tag created.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "tags"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Lead chaud\",\n  \"color\": \"#ef4444\",\n  \"description\": \"Prospect avec budget confirmé et calendrier court.\",\n  \"category\": \"priority\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"name\": \"Lead chaud\",\n    \"color\": \"#ef4444\",\n    \"description\": \"Prospect avec budget confirmé et calendrier court.\",\n    \"category\": \"priority\",\n    \"system_key\": null,\n    \"created_at\": \"2026-05-04T10:00:00.000Z\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "5159938b-0e8e-4d0e-b0c4-e5538a9acd38",
              "name": "Parameter or body validation failed.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "tags"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Lead chaud\",\n  \"color\": \"#ef4444\",\n  \"description\": \"Prospect avec budget confirmé et calendrier court.\",\n  \"category\": \"priority\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"validation_error\",\n    \"message\": \"Le champ 'email' est requis.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#validation_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"validation_errors\": [\n        {\n          \"path\": \"/email\",\n          \"reason\": \"required\"\n        }\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "5cd9bdaa-5920-4976-ae8a-a314f2dba171",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "tags"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Lead chaud\",\n  \"color\": \"#ef4444\",\n  \"description\": \"Prospect avec budget confirmé et calendrier court.\",\n  \"category\": \"priority\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e80249fb-4d5f-4ba1-a81d-9666a2a5742b",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "tags"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Lead chaud\",\n  \"color\": \"#ef4444\",\n  \"description\": \"Prospect avec budget confirmé et calendrier court.\",\n  \"category\": \"priority\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "07a08a54-97f5-424c-ba61-bacb24e0ee92",
              "name": "A resource with a conflicting unique identifier already exists.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "tags"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Lead chaud\",\n  \"color\": \"#ef4444\",\n  \"description\": \"Prospect avec budget confirmé et calendrier court.\",\n  \"category\": \"priority\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"conflict_error\",\n    \"code\": \"duplicate_resource\",\n    \"message\": \"Un contact avec cet email existe déjà.\",\n    \"hint\": \"Utilise PATCH /v1/contacts/{id} pour mettre à jour le contact existant.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#duplicate_resource\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"conflicting_field\": \"email\",\n      \"conflicting_value\": \"prospect@example.com\",\n      \"existing_id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T8\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "c9a3f002-ba83-49ba-89f5-f54f129c9207",
              "name": "The `Content-Type` header is missing or not supported for this endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "tags"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Lead chaud\",\n  \"color\": \"#ef4444\",\n  \"description\": \"Prospect avec budget confirmé et calendrier court.\",\n  \"category\": \"priority\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unsupported Media Type",
              "code": 415,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_content_type\",\n    \"message\": \"Content-Type `text/plain` non supporté. Utilise `application/json`.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/conventions#content-type\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"received\": \"text/plain\",\n      \"expected\": [\n        \"application/json\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "a22e983f-eee5-4cf4-bde4-834d98051d40",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "tags"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Lead chaud\",\n  \"color\": \"#ef4444\",\n  \"description\": \"Prospect avec budget confirmé et calendrier court.\",\n  \"category\": \"priority\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "90970901-9585-4d31-9beb-9b6dd8b288c7",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "tags"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Lead chaud\",\n  \"color\": \"#ef4444\",\n  \"description\": \"Prospect avec budget confirmé et calendrier court.\",\n  \"category\": \"priority\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "977acfca-1eee-4826-bf1c-75a840df5511",
      "name": "Automations",
      "description": {
        "content": "Automated workflows (follow-ups, sequences, triggers)",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "32f5494c-142d-49d2-b57f-5ce8c19cc96b",
          "name": "List automations",
          "request": {
            "name": "List automations",
            "description": {
              "content": "Returns the paginated list of the client's active automations (cursor v2).\nStable sort `created_at DESC, id DESC`. Archived automations\n(`archived_at IS NOT NULL`) are excluded — the public API does not\nexpose them.\n\n### Filters\n\n- `?status=active` — only automations with `is_active=true`.\n- `?status=inactive` — only automations with `is_active=false`.\n\n### Read-only\n\nThe public API only exposes read access (list + history) and\nmanual triggering. Creating, editing and archiving an automation\nhappen in the dashboard — there is no POST/PATCH/DELETE\n`/v1/automations` endpoint.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "automations"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "cursor",
                  "value": "<string,null>",
                  "description": "Opaque pagination cursor — pass the `pagination.next_cursor` value from the previous page."
                },
                {
                  "disabled": false,
                  "key": "limit",
                  "value": "20",
                  "description": "Maximum number of results per page (default 20, max 100). Above that → 400 invalid_request."
                },
                {
                  "disabled": false,
                  "key": "created_after",
                  "value": "<dateTime>",
                  "description": "Filter — only resources created after this date (inclusive)."
                },
                {
                  "disabled": false,
                  "key": "created_before",
                  "value": "<dateTime>",
                  "description": "Filter — only resources created before this date (inclusive)."
                },
                {
                  "disabled": false,
                  "key": "status",
                  "value": "<string>",
                  "description": "Filter on `is_active=true` (active) or `is_active=false` (inactive)."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "2bd6e740-0142-4f92-9ca3-e722ef9c5b6d",
              "name": "Paginated list of automations.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "automations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "status",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": [\n    {\n      \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n      \"name\": \"Relance lead inactif 7 jours\",\n      \"category\": \"nurturing\",\n      \"trigger_type\": \"lead_captured\",\n      \"action_type\": \"send_email\",\n      \"is_active\": true,\n      \"last_executed_at\": \"2026-05-04T08:12:00.000Z\",\n      \"execution_count\": 42,\n      \"created_at\": \"2026-04-15T10:00:00.000Z\",\n      \"updated_at\": \"2026-05-04T08:12:00.000Z\"\n    }\n  ],\n  \"pagination\": {\n    \"next_cursor\": null,\n    \"has_more\": false,\n    \"limit\": 20,\n    \"cursor\": null,\n    \"total_count\": 1\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1a10ac5e-f8de-43c6-8f78-5e6cb741f8af",
              "name": "The request is malformed (missing header, invalid JSON, invalid parameter).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "automations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "status",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_request\",\n    \"message\": \"Le paramètre 'cursor' est invalide ou expiré.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#invalid_request\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"field\": \"cursor\",\n      \"reason\": \"malformed_base64\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "96545edb-b4a9-4ba7-8087-9bfbf6b0d239",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "automations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "status",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ab84d8db-c4c5-46ca-bc8f-0ad2c8ec3b1e",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "automations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "status",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0544c5e2-81d4-47cf-b507-8373d52e4185",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "automations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "status",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e2112458-239c-4a68-b346-4e49fab10a2b",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "automations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "status",
                      "value": "<string>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "5cd802c7-9de2-4b4d-a40a-d52c437a0e99",
          "name": "Manually trigger an automation",
          "request": {
            "name": "Manually trigger an automation",
            "description": {
              "content": "Creates an execution with `status=\"pending\"` and `trigger_type=\"manual_api\"`,\nclaimable by the automation engine (asynchronous, no guarantee of\nsynchronous completion). To track the execution's progress,\ncall `GET /v1/automations/{id}/history`.\n\n### Preconditions\n\n- Automations must not have been removed from the account —\n  otherwise `403 feature_not_available`.\n- The automation must belong to the calling client and must not be\n  archived — otherwise `404 not_found`.\n- The automation must have `is_active=true` — otherwise\n  `409 automation_inactive`.\n- The automation must be published — otherwise `409 automation_not_published`.\n- The published automation must have a trigger node — otherwise\n  `409 no_trigger`.\n- The `contact_id` must belong to the calling client — otherwise\n  `404 not_found`. A contact absorbed by a merge also returns\n  `404 not_found`: trigger on the contact that was kept.\n\n### Enrollment guards\n\nManual triggering goes through the same guards as automatic\ntriggers:\n\n- Contact already in an active run of this automation — otherwise\n  `409 already_enrolled` (turn on Multiple concurrent runs in the\n  Enrollment settings to allow concurrent runs).\n- Duplicate within the last 5 minutes, cap of 5 enrollments per\n  contact per 24 h on this automation, or global cap of 200\n  executions per hour for the account — otherwise `429 trigger_throttled`.\n\nThe body accepts an optional `event_data` (free-form JSON object) injected into\nthe execution and available to the graph's template variables.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "automations",
                ":id",
                "trigger"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<uuid>",
                  "key": "id",
                  "description": "(Required) UUID of the resource."
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"contact_id\": \"<uuid>\",\n  \"event_data\": {\n    \"key_0\": 4205\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "5351a2d8-b2ad-495b-a547-94f086281e98",
              "name": "`pending` execution created — claimed asynchronously by the engine.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "automations",
                    ":id",
                    "trigger"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n  \"event_data\": {\n    \"source\": \"crm_import\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\",\n    \"automation_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"contact_id\": \"2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e\",\n    \"trigger_type\": \"manual_api\",\n    \"status\": \"pending\",\n    \"created_at\": \"2026-05-04T12:00:00.000Z\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "5e9e5bfe-0115-46db-969b-8fc6f3c15bbf",
              "name": "Parameter or body validation failed.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "automations",
                    ":id",
                    "trigger"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n  \"event_data\": {\n    \"source\": \"crm_import\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"validation_error\",\n    \"message\": \"Le champ 'email' est requis.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#validation_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"validation_errors\": [\n        {\n          \"path\": \"/email\",\n          \"reason\": \"required\"\n        }\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e7586250-f915-41a2-abea-dc135718759c",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "automations",
                    ":id",
                    "trigger"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n  \"event_data\": {\n    \"source\": \"crm_import\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b185219c-692c-4fbb-a019-9cdffbdfabb2",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "automations",
                    ":id",
                    "trigger"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n  \"event_data\": {\n    \"source\": \"crm_import\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "bb3929d5-dffd-4a33-b6b3-6e9a942c612a",
              "name": "The requested resource doesn't exist (or isn't within the tenant's scope).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "automations",
                    ":id",
                    "trigger"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n  \"event_data\": {\n    \"source\": \"crm_import\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"not_found_error\",\n    \"code\": \"resource_not_found\",\n    \"message\": \"Le contact demandé n'existe pas.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#resource_not_found\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0324cbbf-18a8-4f41-b17e-e9fdb93d1dcc",
              "name": "The request is syntactically valid but violates a business rule.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "automations",
                    ":id",
                    "trigger"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n  \"event_data\": {\n    \"source\": \"crm_import\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"business_rule_error\",\n    \"code\": \"business_rule_violation\",\n    \"message\": \"Impossible d'envoyer un devis déjà accepté.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#business_rule_violation\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"rule\": \"quote_already_accepted\",\n      \"current_state\": \"accepted\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1eae6e79-c121-4a32-8991-8e862ade1a65",
              "name": "The `Content-Type` header is missing or not supported for this endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "automations",
                    ":id",
                    "trigger"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n  \"event_data\": {\n    \"source\": \"crm_import\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unsupported Media Type",
              "code": 415,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_content_type\",\n    \"message\": \"Content-Type `text/plain` non supporté. Utilise `application/json`.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/conventions#content-type\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"received\": \"text/plain\",\n      \"expected\": [\n        \"application/json\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "a42b7f76-6d8f-4c47-bb45-90c08cbfb75c",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "automations",
                    ":id",
                    "trigger"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n  \"event_data\": {\n    \"source\": \"crm_import\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2c419e4e-661a-48b3-afed-d5a1cbb4c0ed",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "automations",
                    ":id",
                    "trigger"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n  \"event_data\": {\n    \"source\": \"crm_import\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "cc28d1ea-8723-401e-ad11-3081bf180149",
          "name": "List an automation's execution history",
          "request": {
            "name": "List an automation's execution history",
            "description": {
              "content": "Returns the paginated list of an automation's executions (cursor v2).\nStable sort `created_at DESC, id DESC` — most recent executions\nfirst. An execution is one run of the automation for a given\ncontact; the engine can restart it after a failure\n(`retry_count > 0`).\n\nThe automation must belong to the calling client and must not be\narchived — otherwise `404 not_found`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "automations",
                ":id",
                "history"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "cursor",
                  "value": "<string,null>",
                  "description": "Opaque pagination cursor — pass the `pagination.next_cursor` value from the previous page."
                },
                {
                  "disabled": false,
                  "key": "limit",
                  "value": "20",
                  "description": "Maximum number of results per page (default 20, max 100). Above that → 400 invalid_request."
                },
                {
                  "disabled": false,
                  "key": "created_after",
                  "value": "<dateTime>",
                  "description": "Filter — only resources created after this date (inclusive)."
                },
                {
                  "disabled": false,
                  "key": "created_before",
                  "value": "<dateTime>",
                  "description": "Filter — only resources created before this date (inclusive)."
                }
              ],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<uuid>",
                  "key": "id",
                  "description": "(Required) UUID of the resource."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "f1b3cebe-7c49-4f46-9431-eb06716824ac",
              "name": "Paginated list of the automation's executions.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "automations",
                    ":id",
                    "history"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": [\n    {\n      \"id\": \"1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\",\n      \"automation_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n      \"contact_id\": \"2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e\",\n      \"trigger_type\": \"manual_api\",\n      \"status\": \"completed\",\n      \"current_node_id\": null,\n      \"scheduled_at\": null,\n      \"execution_log\": {\n        \"steps\": [\n          {\n            \"action\": \"send_email\",\n            \"status\": \"delivered\"\n          }\n        ]\n      },\n      \"retry_count\": 0,\n      \"created_at\": \"2026-05-04T12:00:00.000Z\",\n      \"updated_at\": \"2026-05-04T12:00:05.000Z\"\n    }\n  ],\n  \"pagination\": {\n    \"next_cursor\": null,\n    \"has_more\": false,\n    \"limit\": 20,\n    \"cursor\": null,\n    \"total_count\": 1\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "bd8d7280-64f6-417d-b3f1-cd8d5059446d",
              "name": "The request is malformed (missing header, invalid JSON, invalid parameter).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "automations",
                    ":id",
                    "history"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_request\",\n    \"message\": \"Le paramètre 'cursor' est invalide ou expiré.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#invalid_request\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"field\": \"cursor\",\n      \"reason\": \"malformed_base64\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9c775207-ea24-4091-bd2f-78b7c22965c0",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "automations",
                    ":id",
                    "history"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ce161e80-48fc-4ba4-80b9-7d83e20a01cf",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "automations",
                    ":id",
                    "history"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "72a921a6-65bd-4bd4-abc0-d6b4f45df3c4",
              "name": "The requested resource doesn't exist (or isn't within the tenant's scope).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "automations",
                    ":id",
                    "history"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"not_found_error\",\n    \"code\": \"resource_not_found\",\n    \"message\": \"Le contact demandé n'existe pas.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#resource_not_found\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e0a45709-4c03-430a-8f3e-4d5882768ea1",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "automations",
                    ":id",
                    "history"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "625bac12-69de-4ec9-a82d-0d2678e974db",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "automations",
                    ":id",
                    "history"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "dbe63d22-8c7a-4325-a689-557d58b51a78",
      "name": "Pipeline",
      "description": {
        "content": "Sales pipeline deals and stages",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "e9b7f2a1-b4dc-43a5-a9ff-eb16bee31aa5",
          "name": "List pipeline deals",
          "request": {
            "name": "List pipeline deals",
            "description": {
              "content": "Returns the paginated list of the account's deals (opportunities) (cursor v2).\nStable sort `created_at DESC, id DESC`.\n\nA deal is NOT a separate entity in the database: it is a\n`client_contacts` row with `pipeline_stage_id IS NOT NULL`. The set\nof exposed fields is intentionally limited to what matters for\nthe pipeline view (contact details + stage + value + score). For the full\ncontact (custom_fields, tags, notes), use `GET /v1/contacts/{id}`.\n\n### Filters\n\n- `?stage_id` (uuid) — exact match on the pipeline stage.\n\n### Merged contacts\n\nA contact absorbed by a merge no longer appears in the list: its\nhistory lives in the surviving contact, which is the only one listed.\n\n### No single GET\n\nNo `GET /v1/pipeline/deals/{id}` endpoint is exposed — to\nretrieve an individual deal, use `GET /v1/contacts/{id}` or\nfilter this list by `?stage_id`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "pipeline",
                "deals"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "cursor",
                  "value": "<string,null>",
                  "description": "Opaque pagination cursor — pass the `pagination.next_cursor` value from the previous page."
                },
                {
                  "disabled": false,
                  "key": "limit",
                  "value": "20",
                  "description": "Maximum number of results per page (default 20, max 100). Above that → 400 invalid_request."
                },
                {
                  "disabled": false,
                  "key": "created_after",
                  "value": "<dateTime>",
                  "description": "Filter — only resources created after this date (inclusive)."
                },
                {
                  "disabled": false,
                  "key": "created_before",
                  "value": "<dateTime>",
                  "description": "Filter — only resources created before this date (inclusive)."
                },
                {
                  "disabled": false,
                  "key": "stage_id",
                  "value": "<uuid>",
                  "description": "Exact match on the pipeline stage."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "246dc943-292b-4133-8b8f-7c78b9296596",
              "name": "Paginated list of deals.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "stage_id",
                      "value": "<uuid>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": [\n    {\n      \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n      \"email\": \"alex@example.com\",\n      \"phone\": \"+15145551234\",\n      \"first_name\": \"Alex\",\n      \"last_name\": \"Tremblay\",\n      \"company\": \"Acme Inc.\",\n      \"pipeline_stage_id\": \"1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\",\n      \"deal_value\": 2500,\n      \"created_at\": \"2026-05-04T10:00:00.000Z\",\n      \"updated_at\": \"2026-05-04T11:15:00.000Z\"\n    }\n  ],\n  \"pagination\": {\n    \"next_cursor\": null,\n    \"has_more\": false,\n    \"limit\": 20,\n    \"cursor\": null,\n    \"total_count\": 1\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "3cb1ab36-f391-4d71-a3dc-5280b3ed5573",
              "name": "The request is malformed (missing header, invalid JSON, invalid parameter).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "stage_id",
                      "value": "<uuid>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_request\",\n    \"message\": \"Le paramètre 'cursor' est invalide ou expiré.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#invalid_request\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"field\": \"cursor\",\n      \"reason\": \"malformed_base64\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8f0f3c1b-4265-4b53-9b99-63b5b4efa6c8",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "stage_id",
                      "value": "<uuid>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "6d10df7c-b644-41c9-a918-9dbf45ad033c",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "stage_id",
                      "value": "<uuid>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "c2e65eb6-109b-4344-b9b9-84e1d7919e38",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "stage_id",
                      "value": "<uuid>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "4e6de416-8e13-4694-84c7-5151305e8e8c",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "stage_id",
                      "value": "<uuid>"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "c629a6f0-4c32-41ad-bb12-e83c131ead63",
          "name": "Place a contact in the pipeline",
          "request": {
            "name": "Place a contact in the pipeline",
            "description": {
              "content": "Places an existing contact in a pipeline stage (sets\n`pipeline_stage_id`). **Does not create a contact** — `contact_id` must\nalready exist and belong to the calling account (otherwise `404 not_found`).\nThe same applies to `stage_id` (`404 not_found` if the stage does not belong\nto the account).\n\nA `contact_id` that points to a contact absorbed by a merge returns\n`404 not_found`: place the surviving contact instead. If the merge is\nundone from the dashboard, the contact becomes accessible again under\nits ID.\n\nIf the contact is already in a stage of the same pipeline, it is\nmoved there. The move goes through the same engine as the\ndashboard: it appears in the contact's timeline, triggers the\nstage automations and the webhook, and counts as a human\ndecision (the AI agent stops following up with this lead).\n\nA contact filed in a different pipeline than the target stage's\nis not moved: `422 business_rule_violation` with\n`details.reason` = `other_pipeline` (moving a contact between pipelines\nis done from the dashboard). An archived contact is not moved\neither (`details.reason` = `contact_archived`).\n\nA **disqualified** lead does not change stage until its\ndisqualification is lifted: the request returns\n`409 lead_disqualified`. Moving it to a lost stage, or to the\ndisqualification stage, is still accepted. You reopen the lead from\nits contact in the dashboard.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "pipeline",
                "deals"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"contact_id\": \"<uuid>\",\n  \"stage_id\": \"<uuid>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "a7d039f2-7b20-4f88-a273-dde9a1142968",
              "name": "Deal placed in the pipeline.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n  \"stage_id\": \"1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"email\": \"alex@example.com\",\n    \"phone\": \"+15145551234\",\n    \"first_name\": \"Alex\",\n    \"last_name\": \"Tremblay\",\n    \"company\": \"Acme Inc.\",\n    \"pipeline_stage_id\": \"1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\",\n    \"deal_value\": 2500,\n    \"created_at\": \"2026-05-04T10:00:00.000Z\",\n    \"updated_at\": \"2026-05-04T12:00:00.000Z\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "a4c5099a-fa9d-48bb-a72f-75a8b9262da3",
              "name": "Parameter or body validation failed.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n  \"stage_id\": \"1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"validation_error\",\n    \"message\": \"Le champ 'email' est requis.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#validation_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"validation_errors\": [\n        {\n          \"path\": \"/email\",\n          \"reason\": \"required\"\n        }\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "151a467c-4663-41a4-9eaf-7ca6744f2312",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n  \"stage_id\": \"1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "acb7809f-861c-4199-bf91-ac60ba63fa92",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n  \"stage_id\": \"1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "013d6010-e750-4199-9bfc-44329f3eb8bf",
              "name": "The requested resource doesn't exist (or isn't within the tenant's scope).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n  \"stage_id\": \"1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"not_found_error\",\n    \"code\": \"resource_not_found\",\n    \"message\": \"Le contact demandé n'existe pas.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#resource_not_found\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ca3c0cac-42d6-433d-bc6d-7c91357b8aec",
              "name": "The targeted lead is disqualified: its stage can't change until the\ndisqualification is lifted. Moving it to a lost stage, or to\nthe disqualification stage, is still accepted.\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n  \"stage_id\": \"1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"conflict_error\",\n    \"code\": \"lead_disqualified\",\n    \"message\": \"Ce lead est disqualifié : il doit être rouvert avant de changer d'étape.\",\n    \"hint\": \"Rouvre le lead depuis sa fiche dans le tableau de bord, puis rejoue la requête. Une étape perdue ou une étape de disqualification reste acceptée sans réouverture.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#lead_disqualified\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"contact_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n      \"stage_id\": \"2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2280218f-9524-445e-b93c-50ede8a72c6c",
              "name": "The `Content-Type` header is missing or not supported for this endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n  \"stage_id\": \"1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unsupported Media Type",
              "code": 415,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_content_type\",\n    \"message\": \"Content-Type `text/plain` non supporté. Utilise `application/json`.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/conventions#content-type\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"received\": \"text/plain\",\n      \"expected\": [\n        \"application/json\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "bcdbd6cc-1b0f-4c98-b16b-9d3c359e4b16",
              "name": "The request is syntactically valid but violates a business rule.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n  \"stage_id\": \"1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"business_rule_error\",\n    \"code\": \"business_rule_violation\",\n    \"message\": \"Impossible d'envoyer un devis déjà accepté.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#business_rule_violation\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"rule\": \"quote_already_accepted\",\n      \"current_state\": \"accepted\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f479c5d1-4ae6-4282-bb4c-6fedfc19e651",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n  \"stage_id\": \"1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "c9376371-e0f8-41d7-8ad8-eb5470480e49",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n  \"stage_id\": \"1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "441fab03-31f7-4955-bdc5-7a3d6ac62012",
          "name": "Move a deal to another stage",
          "request": {
            "name": "Move a deal to another stage",
            "description": {
              "content": "Moves a deal (`pipeline_stage_id`) to a new stage. Only the\nstage move is exposed through this endpoint — to change the\ndeal's other fields (email, deal_value, etc.), use\n`PATCH /v1/contacts/{id}`.\n\n### Preconditions\n\n- The target deal must exist, belong to the calling account, and have\n  `pipeline_stage_id IS NOT NULL`, otherwise `404 not_found`. The ID of a\n  contact absorbed by a merge also returns `404 not_found`: move\n  the surviving contact.\n- The target stage must belong to the calling account, otherwise\n  `404 not_found`.\n- The lead must not be disqualified, otherwise\n  `409 lead_disqualified`. A lost stage or the disqualification\n  stage is still an accepted target; otherwise, reopen the lead\n  from its contact in the dashboard before retrying the request.\n- The target stage must belong to the deal's pipeline, and the contact\n  must not be archived, otherwise `422 business_rule_violation`\n  (`details.reason` = `other_pipeline` or `contact_archived`).\n\nThe move goes through the same engine as the dashboard: it\nappears in the contact's timeline, triggers the stage\nautomations and the webhook, and counts as a human decision (the AI\nagent stops following up with this lead).\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "pipeline",
                "deals",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<uuid>",
                  "key": "id",
                  "description": "(Required) UUID of the resource."
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PATCH",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"stage_id\": \"<uuid>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "76daad30-294c-43d4-b917-55b9fe3c9d72",
              "name": "Deal moved to the new stage.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"stage_id\": \"2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"email\": \"alex@example.com\",\n    \"phone\": \"+15145551234\",\n    \"first_name\": \"Alex\",\n    \"last_name\": \"Tremblay\",\n    \"company\": \"Acme Inc.\",\n    \"pipeline_stage_id\": \"2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e\",\n    \"deal_value\": 2500,\n    \"created_at\": \"2026-05-04T10:00:00.000Z\",\n    \"updated_at\": \"2026-05-04T13:00:00.000Z\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f4a61492-2353-48c9-93fc-4de9abaa53b0",
              "name": "Parameter or body validation failed.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"stage_id\": \"2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"validation_error\",\n    \"message\": \"Le champ 'email' est requis.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#validation_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"validation_errors\": [\n        {\n          \"path\": \"/email\",\n          \"reason\": \"required\"\n        }\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1019c716-552d-4085-bed3-8dd79a478478",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"stage_id\": \"2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "092d7141-c387-437b-9041-ef242e51f6d3",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"stage_id\": \"2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "3559455a-ccf3-4600-a5aa-0c53ba7a68b1",
              "name": "The requested resource doesn't exist (or isn't within the tenant's scope).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"stage_id\": \"2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"not_found_error\",\n    \"code\": \"resource_not_found\",\n    \"message\": \"Le contact demandé n'existe pas.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#resource_not_found\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7b0866c3-1e52-4816-8078-d49b9d8c7e05",
              "name": "The targeted lead is disqualified: its stage can't change until the\ndisqualification is lifted. Moving it to a lost stage, or to\nthe disqualification stage, is still accepted.\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"stage_id\": \"2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"conflict_error\",\n    \"code\": \"lead_disqualified\",\n    \"message\": \"Ce lead est disqualifié : il doit être rouvert avant de changer d'étape.\",\n    \"hint\": \"Rouvre le lead depuis sa fiche dans le tableau de bord, puis rejoue la requête. Une étape perdue ou une étape de disqualification reste acceptée sans réouverture.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#lead_disqualified\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"contact_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n      \"stage_id\": \"2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "6f4fad2d-d3c9-4279-954f-f9a499856583",
              "name": "The `Content-Type` header is missing or not supported for this endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"stage_id\": \"2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unsupported Media Type",
              "code": 415,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_content_type\",\n    \"message\": \"Content-Type `text/plain` non supporté. Utilise `application/json`.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/conventions#content-type\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"received\": \"text/plain\",\n      \"expected\": [\n        \"application/json\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "24abc6e3-9e59-4eb1-a912-84b2592ea180",
              "name": "The request is syntactically valid but violates a business rule.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"stage_id\": \"2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"business_rule_error\",\n    \"code\": \"business_rule_violation\",\n    \"message\": \"Impossible d'envoyer un devis déjà accepté.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#business_rule_violation\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"rule\": \"quote_already_accepted\",\n      \"current_state\": \"accepted\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "cbd9a4ab-f1ca-4791-bb82-fd9da2d9015b",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"stage_id\": \"2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "99724113-758d-4f02-8731-aeaf2ae0208f",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"stage_id\": \"2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "d3507543-9465-4252-8e3c-74dbc2b6a4f4",
          "name": "Remove a deal from the pipeline",
          "request": {
            "name": "Remove a deal from the pipeline",
            "description": {
              "content": "Removes the deal from the pipeline by setting `pipeline_stage_id = NULL`. The\ncontact is NOT deleted — it remains accessible via\n`GET /v1/contacts/{id}`. To permanently delete the contact,\nuse `DELETE /v1/contacts/{id}`.\n\nThe target deal must exist, belong to the calling account, and have\n`pipeline_stage_id IS NOT NULL` — otherwise `404 not_found`. The ID of a\ncontact absorbed by a merge also returns `404 not_found`: remove the\nsurviving contact. If the merge is undone from the dashboard, the\ncontact becomes accessible again under its ID. An archived contact stays in\nits pipeline: `422 business_rule_violation` (`details.reason` =\n`contact_archived`).\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "pipeline",
                "deals",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<uuid>",
                  "key": "id",
                  "description": "(Required) UUID of the resource."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "DELETE",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "b87e778e-f4f1-4e27-a07e-eb36628027d4",
              "name": "Deal removed from the pipeline (the contact is not deleted).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"removed_from_pipeline\": true\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0ee7ea65-055e-4e24-81b3-cc08452a39b9",
              "name": "Parameter or body validation failed.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"validation_error\",\n    \"message\": \"Le champ 'email' est requis.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#validation_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"validation_errors\": [\n        {\n          \"path\": \"/email\",\n          \"reason\": \"required\"\n        }\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "fa02d06c-11c0-4a3c-bca8-76c911f3032b",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "527bf77a-d0f8-42bc-a36f-e398a2ce3de4",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "31b4595e-b7ee-4e93-928a-0d7b2aa49635",
              "name": "The requested resource doesn't exist (or isn't within the tenant's scope).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"not_found_error\",\n    \"code\": \"resource_not_found\",\n    \"message\": \"Le contact demandé n'existe pas.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#resource_not_found\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2f042c80-fed9-491e-9c8b-b8682dd1e465",
              "name": "The request is syntactically valid but violates a business rule.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"business_rule_error\",\n    \"code\": \"business_rule_violation\",\n    \"message\": \"Impossible d'envoyer un devis déjà accepté.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#business_rule_violation\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"rule\": \"quote_already_accepted\",\n      \"current_state\": \"accepted\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8e23fd44-5633-42e0-a9b2-2acbb32d7ebf",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "53b4ad23-1ee7-469f-9554-82e41516d500",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "deals",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "747126fa-8def-4adf-8a59-0facffe6278a",
          "name": "List pipeline stages",
          "request": {
            "name": "List pipeline stages",
            "description": {
              "content": "Returns the full list of stages across the account's pipelines, sorted\nby pipeline (in dashboard order), then by `stage_order ASC`.\nEach stage names its pipeline (`pipeline.name`,\n`pipeline.is_default`): an account with several pipelines can have\ntwo stages with the same name. Each stage includes a\n`contact_count` computed in real time (the number of the account's contacts\ncurrently in that stage, excluding archived\nand merged contacts — useful for pipeline KPIs). A stage hidden in\nthe dashboard is still listed, flagged `is_hidden`.\n\n### Non-paginated response\n\nThe endpoint returns **all of the account's stages in a single call**\n(usually < 20 per account, max 50). The response format stays\n`list V2`-compatible for integration consistency\n(`pagination.next_cursor=null`, `pagination.has_more=false`,\n`pagination.limit` and `pagination.total_count` equal the number of\nstages returned).\n\n### Read-only\n\nCreating, editing, and reordering stages is done in the\ndashboard — no POST/PATCH/DELETE `/v1/pipeline/stages` endpoint\nis exposed.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "pipeline",
                "stages"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "d2a5f3f9-f666-45e5-afff-93bf4aabd7da",
              "name": "Full list of pipeline stages (non-paginated).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "stages"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": [\n    {\n      \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n      \"name\": \"Nouveau lead\",\n      \"slug\": \"new-lead\",\n      \"color\": \"#94a3b8\",\n      \"stage_order\": 1,\n      \"is_default\": true,\n      \"is_won\": false,\n      \"is_lost\": false,\n      \"probability\": 10,\n      \"created_at\": \"2026-04-01T10:00:00.000Z\",\n      \"contact_count\": 32,\n      \"is_hidden\": false,\n      \"pipeline_id\": \"5c1e9a7b-2d3f-4a6b-8c9d-0e1f2a3b4c5d\",\n      \"pipeline\": {\n        \"id\": \"5c1e9a7b-2d3f-4a6b-8c9d-0e1f2a3b4c5d\",\n        \"name\": \"Pipeline\",\n        \"is_default\": true\n      }\n    },\n    {\n      \"id\": \"1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\",\n      \"name\": \"Qualifié\",\n      \"slug\": \"qualified\",\n      \"color\": \"#3b82f6\",\n      \"stage_order\": 2,\n      \"is_default\": false,\n      \"is_won\": false,\n      \"is_lost\": false,\n      \"probability\": 50,\n      \"created_at\": \"2026-04-01T10:00:00.000Z\",\n      \"contact_count\": 17,\n      \"is_hidden\": false,\n      \"pipeline_id\": \"5c1e9a7b-2d3f-4a6b-8c9d-0e1f2a3b4c5d\",\n      \"pipeline\": {\n        \"id\": \"5c1e9a7b-2d3f-4a6b-8c9d-0e1f2a3b4c5d\",\n        \"name\": \"Pipeline\",\n        \"is_default\": true\n      }\n    }\n  ],\n  \"pagination\": {\n    \"next_cursor\": null,\n    \"has_more\": false,\n    \"limit\": 2,\n    \"cursor\": null,\n    \"total_count\": 2\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "cd869d8a-fd67-4303-bd47-88de98eb4a4e",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "stages"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "74c6b671-48b2-451e-8f68-ee2602101b05",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "stages"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9027de64-5d9a-4e34-a82e-78c0cd416785",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "stages"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "fefe5d26-4cb9-43d7-84bc-be67c64bc663",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "pipeline",
                    "stages"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "b4ce7efb-36b1-4d8b-bfa1-acfc28d8acfa",
      "name": "Emails",
      "description": {
        "content": "Send and read transactional emails",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "ad690c05-7988-4f44-aa46-323a150387e0",
          "name": "List email conversations",
          "request": {
            "name": "List email conversations",
            "description": {
              "content": "Returns a paginated list of the account's email threads (cursor v2). Stable\nsort: `last_message_at DESC, id DESC` — conversations with a\nrecent exchange come first. `last_message_at` is `NOT NULL` in the table.\n\n### Read-only\n\nThe public API only exposes the list of threads. The individual\nmessages of a conversation aren't available through the\npublic API yet — the payload is limited to the thread's metadata.\nTo send an email, use `POST /v1/emails/send`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "emails",
                "conversations"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "cursor",
                  "value": "<string,null>",
                  "description": "Opaque pagination cursor — pass the `pagination.next_cursor` value from the previous page."
                },
                {
                  "disabled": false,
                  "key": "limit",
                  "value": "20",
                  "description": "Maximum number of results per page (default 20, max 100). Above that → 400 invalid_request."
                },
                {
                  "disabled": false,
                  "key": "created_after",
                  "value": "<dateTime>",
                  "description": "Filter — only resources created after this date (inclusive)."
                },
                {
                  "disabled": false,
                  "key": "created_before",
                  "value": "<dateTime>",
                  "description": "Filter — only resources created before this date (inclusive)."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "0fa5a975-7718-4e13-9005-756808b3de06",
              "name": "Paginated list of email conversations.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "emails",
                    "conversations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": [\n    {\n      \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n      \"contact_id\": \"2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e\",\n      \"sender_id\": \"1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\",\n      \"subject\": \"Suivi de notre échange\",\n      \"status\": \"open\",\n      \"unread_count\": 2,\n      \"last_message_at\": \"2026-05-04T12:34:56.789Z\",\n      \"created_at\": \"2026-04-15T10:00:00.000Z\"\n    }\n  ],\n  \"pagination\": {\n    \"next_cursor\": null,\n    \"has_more\": false,\n    \"limit\": 20,\n    \"cursor\": null,\n    \"total_count\": 1\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "17e873a7-d6c0-40f2-9714-48136da24161",
              "name": "The request is malformed (missing header, invalid JSON, invalid parameter).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "emails",
                    "conversations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_request\",\n    \"message\": \"Le paramètre 'cursor' est invalide ou expiré.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#invalid_request\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"field\": \"cursor\",\n      \"reason\": \"malformed_base64\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "54b6d7ee-4c6f-436a-b7d9-aa65e8d5de89",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "emails",
                    "conversations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "efbb3786-4834-4c5e-b9db-ff0e2d8a9df2",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "emails",
                    "conversations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f0f97783-6d45-46e5-8b4b-f192f9406b8d",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "emails",
                    "conversations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "a71b1402-2072-445a-844e-d65b4bbc4776",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "emails",
                    "conversations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "cursor",
                      "value": "eyJ2IjoxLCJmIjoiY3JlYXRlZF9hdCIsInMiOiJkZXNjIiwidmFsIjoiMjAyNi0wNS0wMlQxNDozMDowMFoiLCJpZCI6ImFiYy0xMjMifQ"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    },
                    {
                      "key": "created_after",
                      "value": "2026-05-04T12:34:56.789Z"
                    },
                    {
                      "key": "created_before",
                      "value": "2026-05-04T12:34:56.789Z"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "ddbffea5-9524-4ed8-b4dc-bb9d9cbd487c",
          "name": "Send a transactional email",
          "request": {
            "name": "Send a transactional email",
            "description": {
              "content": "Queues a transactional email for delivery through Resend.\nThe email is created with `status=\"queued\"`, `priority=1`,\n`type=\"transactional\"` and delivered asynchronously by the email\nworker — the 201 response confirms the email was queued, not that it\nwas delivered.\n\n### Sender resolved server-side\n\nThe sender (`from`) is derived from the account's default sender\n(`client_email_senders.is_default = true`). If no default\nsender is configured, the request returns\n`400 no_sender_configured`.\n\n### Idempotency\n\nThe `Idempotency-Key` header is NOT supported on this route — a\nnaive retry will create a second send. An internal idempotency key is\ngenerated server-side (`api-transactional/{clientId}/{ts}`) only to\nprotect against duplicate database inserts.\n\n### Test mode\n\n`\"test\": true` in the body lets you validate an integration without\ntargeting a real contact: personalization variables are\nfilled with sample values, the subject is prefixed with\n`[TEST]`, and recipient compliance checks are\nbypassed. In exchange, the recipient must be an active member\nof the account's team (otherwise 400 `recipient_not_allowed`), and\na quota of 50 tests per rolling 24 hours applies, shared with the\nplatform's test buttons (otherwise 429 `test_quota_exceeded`).\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "emails",
                "send"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"to\": \"<email>\",\n  \"subject\": \"<string>\",\n  \"body\": \"<string>\",\n  \"test\": false\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "23f9365e-d57f-4465-89f0-d1b0d04b7d47",
              "name": "Email queued.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "emails",
                    "send"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"to\": \"alex@example.com\",\n  \"subject\": \"Confirmation de votre commande\",\n  \"body\": \"<p>Bonjour Alex,</p><p>Votre commande est confirmée.</p>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"status\": \"queued\",\n    \"to_email\": \"alex@example.com\",\n    \"subject\": \"Confirmation de votre commande\",\n    \"created_at\": \"2026-05-04T12:00:00.000Z\",\n    \"is_test\": false\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "6521eae0-0aa3-4428-a777-61f6455caa14",
              "name": "Parameter or body validation failed.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "emails",
                    "send"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"to\": \"alex@example.com\",\n  \"subject\": \"Confirmation de votre commande\",\n  \"body\": \"<p>Bonjour Alex,</p><p>Votre commande est confirmée.</p>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"validation_error\",\n    \"message\": \"Le champ 'email' est requis.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#validation_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"validation_errors\": [\n        {\n          \"path\": \"/email\",\n          \"reason\": \"required\"\n        }\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f70813e4-167c-4b36-8c7d-03e722f51240",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "emails",
                    "send"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"to\": \"alex@example.com\",\n  \"subject\": \"Confirmation de votre commande\",\n  \"body\": \"<p>Bonjour Alex,</p><p>Votre commande est confirmée.</p>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "49cadf89-1041-4946-96dc-0e2a5b6296f2",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "emails",
                    "send"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"to\": \"alex@example.com\",\n  \"subject\": \"Confirmation de votre commande\",\n  \"body\": \"<p>Bonjour Alex,</p><p>Votre commande est confirmée.</p>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8d0e7ac9-864a-4181-b68a-0ba70f244940",
              "name": "The `Content-Type` header is missing or not supported for this endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "emails",
                    "send"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"to\": \"alex@example.com\",\n  \"subject\": \"Confirmation de votre commande\",\n  \"body\": \"<p>Bonjour Alex,</p><p>Votre commande est confirmée.</p>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unsupported Media Type",
              "code": 415,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_content_type\",\n    \"message\": \"Content-Type `text/plain` non supporté. Utilise `application/json`.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/conventions#content-type\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"received\": \"text/plain\",\n      \"expected\": [\n        \"application/json\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "732ec67a-c6b1-449e-8491-23e5bb120b06",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "emails",
                    "send"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"to\": \"alex@example.com\",\n  \"subject\": \"Confirmation de votre commande\",\n  \"body\": \"<p>Bonjour Alex,</p><p>Votre commande est confirmée.</p>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "647345ed-c8c6-42a1-b7a8-4452642c3233",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "emails",
                    "send"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"to\": \"alex@example.com\",\n  \"subject\": \"Confirmation de votre commande\",\n  \"body\": \"<p>Bonjour Alex,</p><p>Votre commande est confirmée.</p>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "04a9ca14-b3bc-41e2-a24e-b9272c7f505a",
      "name": "Webhooks",
      "description": {
        "content": "Outbound endpoints that notify an external system of events",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "46315ca2-dbac-4142-8adf-7e7a1162d04b",
          "name": "List webhook subscriptions",
          "request": {
            "name": "List webhook subscriptions",
            "description": {
              "content": "Returns the list of webhook subscriptions created by the calling\nAPI key. Subscriptions created by another key on the same account\nare NOT visible here (filter `client_id AND api_key_id`).\n\n### No cursor pagination\n\nThe maximum of 10 subscriptions per account always fits on a\nsingle page. The response returns `pagination.next_cursor=null` and\n`has_more=false`.\n\n### Secret never returned\n\nThe HMAC secret used to sign outbound payloads is only\nreturned on creation (`POST /v1/webhooks`). It isn't\nreturned here — to rotate it, delete the subscription and\ncreate a new one.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "webhooks"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "e6266859-9739-40a3-bbd3-640fc150e32c",
              "name": "List of this API key's webhook subscriptions.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhooks"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": [\n    {\n      \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n      \"url\": \"https://hooks.example.com/capturia\",\n      \"events\": [\n        \"lead_created\",\n        \"payment_received\"\n      ],\n      \"is_active\": true,\n      \"created_at\": \"2026-04-15T10:00:00.000Z\"\n    }\n  ],\n  \"pagination\": {\n    \"next_cursor\": null,\n    \"has_more\": false,\n    \"limit\": 1,\n    \"cursor\": null,\n    \"total_count\": 1\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b4b25754-7cd6-412d-b2de-21bfb8b1bb2a",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhooks"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "3f3fbc73-4469-459a-8d5d-0f1176eef63b",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhooks"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "82676595-6021-4fba-a4e7-df77dedf8a99",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhooks"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "4e3dc0fc-3e30-43bb-98e0-7c436fe94b01",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhooks"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "b1392971-2cfe-4bce-9ac3-5afb71817bc7",
          "name": "Create a webhook subscription",
          "request": {
            "name": "Create a webhook subscription",
            "description": {
              "content": "Registers a new subscription. Capturia sends an HMAC-signed JSON `POST`\nto `url` every time a subscribed event occurs.\n\n### HTTPS URL required\n\nThe URL must use the `https://` scheme — `http://` is rejected to\navoid leaking payloads in cleartext.\n\n### Limit of 10 subscriptions per account\n\nBeyond 10 active subscriptions on the same account (across all\nkeys), returns `429 subscription_limit_reached`. Delete\nan existing subscription before you create a new one.\n\n### HMAC secret returned only ONCE\n\nThe 201 response includes `secret` in cleartext (64 hex characters, 256 bits\nof entropy). You MUST store it immediately — you use it to\nverify the signature of outbound payloads\n(`X-Capturia-Signature`), and the API never returns it again.\nThe secret is encrypted in the database after this response.\n\n### Scoped to the creating key\n\nThe subscription belongs to both the account AND the API key that\ncreated it. The `GET /v1/webhooks` and\n`DELETE /v1/webhooks/{id}` endpoints only see the current key's\nsubscriptions — a subscription created by another key on the same\naccount can't be listed or deleted through the API.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "webhooks"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"<uri>\",\n  \"events\": [\n    \"<string>\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "84168f76-cc91-45fb-b7e8-5077627168e4",
              "name": "Subscription created. The HMAC `secret` is included in the response\nin cleartext only ONCE — store it immediately.\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhooks"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"url\": \"https://hooks.example.com/capturia\",\n  \"events\": [\n    \"lead_created\",\n    \"payment_received\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n    \"url\": \"https://hooks.example.com/capturia\",\n    \"events\": [\n      \"lead_created\",\n      \"payment_received\"\n    ],\n    \"is_active\": true,\n    \"created_at\": \"2026-05-04T12:00:00.000Z\",\n    \"secret\": \"8f3b1a2c9d4e4f5ab6c7d8e9f0a1b2c38f3b1a2c9d4e4f5ab6c7d8e9f0a1b2c3\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "31b70ab8-e077-4e01-bacf-af31dd3fb02f",
              "name": "Parameter or body validation failed.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhooks"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"url\": \"https://hooks.example.com/capturia\",\n  \"events\": [\n    \"lead_created\",\n    \"payment_received\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"validation_error\",\n    \"message\": \"Le champ 'email' est requis.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#validation_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"validation_errors\": [\n        {\n          \"path\": \"/email\",\n          \"reason\": \"required\"\n        }\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "92ccaea9-5a4b-4813-9af9-5ffbb0dc88eb",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhooks"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"url\": \"https://hooks.example.com/capturia\",\n  \"events\": [\n    \"lead_created\",\n    \"payment_received\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ce131fa3-4fa9-4f6f-8fa1-edf8490702b6",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhooks"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"url\": \"https://hooks.example.com/capturia\",\n  \"events\": [\n    \"lead_created\",\n    \"payment_received\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "676ee061-47c0-4c1b-ab23-b82ee8af41c9",
              "name": "The `Content-Type` header is missing or not supported for this endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhooks"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"url\": \"https://hooks.example.com/capturia\",\n  \"events\": [\n    \"lead_created\",\n    \"payment_received\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unsupported Media Type",
              "code": 415,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_content_type\",\n    \"message\": \"Content-Type `text/plain` non supporté. Utilise `application/json`.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/conventions#content-type\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"received\": \"text/plain\",\n      \"expected\": [\n        \"application/json\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "c19c728a-3b79-4d2d-b559-0d41789394cd",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhooks"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"url\": \"https://hooks.example.com/capturia\",\n  \"events\": [\n    \"lead_created\",\n    \"payment_received\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "658080d4-3782-448c-870d-064f01eab61b",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhooks"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"url\": \"https://hooks.example.com/capturia\",\n  \"events\": [\n    \"lead_created\",\n    \"payment_received\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "4353e54e-2f28-485f-bd3b-871ba4573115",
          "name": "Delete a webhook subscription",
          "request": {
            "name": "Delete a webhook subscription",
            "description": {
              "content": "Permanently deletes a webhook subscription. The subscription\nmust belong to both the calling account AND the calling\nAPI key (filter `client_id AND api_key_id`) — otherwise\n`404 not_found`.\n\n### No soft delete\n\nDeletion is immediate and irreversible — to resume the\nevent stream, create a new subscription with\n`POST /v1/webhooks` (a new secret will be issued).\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "webhooks",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<uuid>",
                  "key": "id",
                  "description": "(Required) UUID of the resource."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "DELETE",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "7573ccc0-3255-4db1-a191-4f928ae3153b",
              "name": "Subscription deleted. No body.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhooks",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "No Content",
              "code": 204,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "text/plain"
                }
              ],
              "body": "",
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "6426a408-a4cd-4e4b-8dc5-996108109b30",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhooks",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "6a837c59-32f4-41dc-8a96-b67da5d099fd",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhooks",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2fd220c2-12c2-42d6-af4d-88e66398bea4",
              "name": "The requested resource doesn't exist (or isn't within the tenant's scope).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhooks",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"not_found_error\",\n    \"code\": \"resource_not_found\",\n    \"message\": \"Le contact demandé n'existe pas.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#resource_not_found\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ea5bb8ef-f508-49b4-9e48-e660b2d10b31",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhooks",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "36a0e82b-9c64-40d1-b25b-90ac1fe2fd1a",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhooks",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "<uuid>",
                      "key": "id",
                      "description": "(Required) UUID of the resource."
                    }
                  ]
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "3671990a-aa8e-4ab7-8a3c-b3d5dd902a66",
          "name": "List the latest deliverable business events (samples)",
          "request": {
            "name": "List the latest deliverable business events (samples)",
            "description": {
              "content": "Returns the account's latest business events, in **exactly\nthe payload shape delivered by a webhook subscription** — the same\npayload builder powers real deliveries and this list.\n\n### What it's for\n\n- **`performList` in Zapier/Make apps**: when a user tests\n  a trigger, the app shows real recent samples, guaranteed\n  to match what a real delivery will send.\n- **Integration debugging**: inspect what would be delivered without\n  waiting for a new event.\n\nThe list combines two sources, from newest to oldest:\n\n- events **recorded in the account's delivery queue**,\n  with the exact data that was or will be delivered;\n- supplemented by events from the **activity log** that the queue\n  didn't record (no subscription was listening to them at the time),\n  formatted by the same builder.\n\nSo it works even when no webhook subscription exists.\nEvents emitted outside the log (`lead_updated`, `note_created`,\n`task_created`, `sms_received`, `email_sent`, `call_ended`…)\nonly appear once a subscription listens to them: as long\nas none does, they aren't recorded anywhere. Internal\nevent types (audit) never appear, and\nsensitive keys in the `changes` field are redacted just as they are on\ndelivery.\n\n### Difference from a real delivery\n\nEach item's `id` field is the event's identifier at its\nsource — on a real delivery, `id` is the delivery's unique\nidentifier (`X-Capturia-Delivery`). The `data.system` field is\nalways `null` in a sample: it is resolved at delivery\ntime. The shape and every other field are identical.\n\n### No cursor pagination\n\nThis is a feed of recent samples, capped at 25 items\n(`limit`, default 10). The response returns\n`pagination.next_cursor=null` and `has_more=false`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "webhook-events"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "event",
                  "value": "<string>",
                  "description": "Restricts results to events of this type (a catalog value,\ne.g. `lead_created`, `booking_created`, `automation_completed`).\nA value outside the catalog returns `400 validation_error`\n(`reason: unknown_event_type`).\n"
                },
                {
                  "disabled": false,
                  "key": "limit",
                  "value": "10",
                  "description": "Maximum number of items (integer from 1 to 25, default 10). A non-integer or out-of-range value returns `400 validation_error`."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "75adb428-5d45-4904-a9a8-52c20a6ad04d",
              "name": "Latest deliverable events, from newest to oldest.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhook-events"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "event",
                      "value": "lead_created"
                    },
                    {
                      "key": "limit",
                      "value": "10"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": [\n    {\n      \"id\": \"3d2a1b0c-4e5f-6a7b-8c9d-0e1f2a3b4c5d\",\n      \"event\": \"lead_created\",\n      \"category\": \"crm\",\n      \"created_at\": \"2026-07-01T12:00:00.000Z\",\n      \"data\": {\n        \"resource_type\": \"client_contacts\",\n        \"resource_id\": \"b7c8d9e0-f1a2-4b3c-8d4e-5f6a7b8c9d0e\",\n        \"resource_name\": \"Jean Bouchard\",\n        \"actor\": {\n          \"name\": \"Formulaire web\",\n          \"type\": null,\n          \"id\": null,\n          \"via\": null\n        },\n        \"changes\": null,\n        \"description\": \"Nouveau lead\",\n        \"metadata\": {\n          \"source\": \"funnel\"\n        },\n        \"contact\": {\n          \"id\": \"b7c8d9e0-f1a2-4b3c-8d4e-5f6a7b8c9d0e\",\n          \"first_name\": \"Jean\",\n          \"last_name\": \"Bouchard\",\n          \"email\": \"jean@example.com\",\n          \"phone\": \"+15555550101\",\n          \"company\": null,\n          \"source\": \"funnel\"\n        },\n        \"system\": null\n      }\n    }\n  ],\n  \"pagination\": {\n    \"next_cursor\": null,\n    \"has_more\": false,\n    \"limit\": 1,\n    \"cursor\": null,\n    \"total_count\": 1\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "00f9efcd-4668-464a-9906-a6e4acc49610",
              "name": "Parameter or body validation failed.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhook-events"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "event",
                      "value": "lead_created"
                    },
                    {
                      "key": "limit",
                      "value": "10"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"validation_error\",\n    \"message\": \"Le champ 'email' est requis.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#validation_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"validation_errors\": [\n        {\n          \"path\": \"/email\",\n          \"reason\": \"required\"\n        }\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "46013a2b-2bdf-46a6-9ff7-e0ef322a684a",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhook-events"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "event",
                      "value": "lead_created"
                    },
                    {
                      "key": "limit",
                      "value": "10"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1890adc4-eaf7-4fce-9d13-7de8250d9c53",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhook-events"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "event",
                      "value": "lead_created"
                    },
                    {
                      "key": "limit",
                      "value": "10"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "bf99133b-c500-43f2-a13d-c4c6e8c375b1",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhook-events"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "event",
                      "value": "lead_created"
                    },
                    {
                      "key": "limit",
                      "value": "10"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "584569ff-4dcb-4c31-82e7-7d1668274121",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "webhook-events"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "event",
                      "value": "lead_created"
                    },
                    {
                      "key": "limit",
                      "value": "10"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "1a1d1efc-b4df-4888-b0ea-b26bd950ee5b",
      "name": "Presuasion submissions",
      "description": {
        "content": "Form submissions from pre-suasion tools",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "b2c28ae1-339d-4ece-8ab4-3b5e34a3b9ff",
          "name": "Submit a pre-suasion tool form",
          "request": {
            "name": "Submit a pre-suasion tool form",
            "description": {
              "content": "**Public endpoint — legacy pre-CAP-440 convention.** This endpoint\ndeparts from the standard v1 API conventions in several ways,\ndocumented below. The pre-suasion gateway (`demo.capturia.io`) calls it\nwhen a visitor completes a pre-suasion tool form published on a\nCapturia account's custom domain.\n\n### Authentication: defense in depth\n\nNo Bearer API key (the endpoint is called by a public gateway, not by a\nthird-party client). Three stacked layers protect the endpoint:\n\n1. **IP rate limit** (`RATE_LIMIT_CONFIG.LEAD_CREATION_LIMIT` requests per\n   `LEAD_WINDOW_SECONDS`) — cuts high-frequency noise.\n2. **HMAC signature** `X-Capturia-Signature: t=<unix>,v1=<hex>` —\n   Stripe webhook pattern, SHA-256 over `${timestamp}.${rawBody}`,\n   5-minute replay window, two-key rotation (`PRESUASION_HMAC_SECRET` +\n   `PRESUASION_HMAC_SECRET_PREVIOUS`). Log-only mode by default, switched\n   to fail-closed with `PRESUASION_HMAC_REQUIRED=true`.\n3. **Cloudflare Turnstile token** (`turnstile_token` body field)\n   verified through siteverify with `idempotency_key` = the body's\n   `submission_id` (stable across retries of the same submission — a\n   token is single-use, and Cloudflare replays the original verdict for\n   the same key), falling back to the request's `request_id` when the\n   submission carries no `submission_id`. Log-only mode by default,\n   switched to fail-closed with\n   `PRESUASION_TURNSTILE_REQUIRED=true`.\n\nIn addition, a **quota per `proposition_slug`** (100 submissions per\nUTC day, Upstash KV) limits the blast radius of a targeted attack even\nif the other layers are bypassed.\n\nThe target account is resolved server-side through `proposition_slug` →\n`presuasion_instances.client_id` — `client_id` is never accepted from\nthe body.\n\n### Custom body and response format\n\nThe body follows a schema specific to this endpoint\n(`PresuasionSubmissionPayload`). The 200 response returns a flat object\n`{success, contact_id, contact_created, activity_id}` instead of the\nstandard v1 `{data: ...}` envelope. Errors return\n`{error: \"string\", issues?: [...]}` instead of `ErrorEnvelope`.\n\n### Behavior\n\n- Resolves the target account through an active `proposition_slug`.\n- Finds the contact with the shared funnel engine: matched by email\n  (case-insensitive, secondary emails included), then by a phone number\n  already known for this account — the existing contact is then\n  enriched with the submitted email as a secondary email, never\n  duplicated and never failing on a uniqueness error. Names are filled\n  in without overwriting, the phone number is set if it was missing (a\n  number already held by another contact stays on the submission), and\n  the implied SMS consent triplet is refreshed on every submission\n  (subject to the STOP guard). On the tokenized path\n  (`identity_confirmed`), the link's contact receives the same additive\n  enrichment.\n- Capture routing set on the tool: a contact **created** by the\n  submission starts in the tool's entry column; the tool's automatic\n  tags are added to every captured contact (created or matched, through\n  the email or the link path); a matched contact that is in no column\n  enters one through the tool. A contact already placed is never moved.\n- Inserts a `presuasion_submission` activity into the contact's\n  timeline with a formatted human-readable `Q/R` block + raw `metadata`\n  (responses, result_data, tool_name, proposition). The tool is\n  identified there by its instance: `metadata.tool_id` and\n  `metadata.proposition_id` carry the identifier of the resolved\n  proposal, like captures from embedded tools.\n\n### Rate limit\n\nEmits the legacy `X-RateLimit-*` headers (IP counter) — not the\nRFC 9331 `RateLimit-*` headers used by the rest of the v1 API.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "presuasion-submissions"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "HMAC SHA-256 signature computed by the gateway over\n`${timestamp}.${rawBody}` with `PRESUASION_HMAC_SECRET`. 5-minute\nreplay window. Optional in log-only mode; required\nwhen `PRESUASION_HMAC_REQUIRED=true` (401 response otherwise).\n",
                "key": "X-Capturia-Signature",
                "value": "<string>"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"proposition_slug\": \"<string>\",\n  \"tool_id\": \"<string>\",\n  \"tool_name\": \"<string>\",\n  \"responses\": {\n    \"key_0\": true\n  },\n  \"formatted_answers\": [\n    {\n      \"question\": \"<string>\",\n      \"answer\": \"<string>\"\n    }\n  ],\n  \"email\": \"<email>\",\n  \"first_name\": \"<string>\",\n  \"last_name\": \"<string>\",\n  \"phone\": \"<string>\",\n  \"address\": \"<string>\",\n  \"postal_code\": \"<string>\",\n  \"address_place_id\": \"<string>\",\n  \"result_data\": {\n    \"key_0\": 5091.606739786142,\n    \"key_1\": 2758.908160352188\n  },\n  \"completed_at\": \"<dateTime>\",\n  \"turnstile_token\": \"<string>\",\n  \"submission_id\": \"<uuid>\",\n  \"token\": \"<string>\",\n  \"session_key\": \"<uuid>\",\n  \"identity_confirmed\": \"<boolean>\",\n  \"identity_declined\": \"<boolean>\",\n  \"custom_domain_id\": \"<string>\",\n  \"ads_consent\": \"<string>\",\n  \"source_url\": \"<uri>\",\n  \"fbp\": \"<string>\",\n  \"fbc\": \"<string>\",\n  \"visitor_ip\": \"<string>\",\n  \"visitor_user_agent\": \"<string>\",\n  \"utm\": {\n    \"source\": \"<string>\",\n    \"medium\": \"<string>\",\n    \"campaign\": \"<string>\",\n    \"content\": \"<string>\",\n    \"term\": \"<string>\"\n  },\n  \"gclid\": \"<string>\",\n  \"captured_at\": \"<dateTime>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "d69e442c-a0d4-4019-b913-4eea3dbefbce",
              "name": "Submission recorded. Contact upserted + `presuasion_submission`\nactivity created in the timeline.\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "presuasion-submissions"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "HMAC SHA-256 signature computed by the gateway over\n`${timestamp}.${rawBody}` with `PRESUASION_HMAC_SECRET`. 5-minute\nreplay window. Optional in log-only mode; required\nwhen `PRESUASION_HMAC_REQUIRED=true` (401 response otherwise).\n",
                    "key": "X-Capturia-Signature",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"proposition_slug\": \"blueprint-ventes-2026\",\n  \"tool_id\": \"calculateur-roi\",\n  \"tool_name\": \"Calculateur de ROI\",\n  \"email\": \"alex@example.com\",\n  \"first_name\": \"Alex\",\n  \"phone\": \"+15145551234\",\n  \"responses\": {\n    \"budget\": \"500-1000\",\n    \"timeline\": \"3-mois\"\n  },\n  \"formatted_answers\": [\n    {\n      \"question\": \"Quel est ton défi principal en ventes ?\",\n      \"answer\": \"Je perds des leads parce que je ne suis pas assez rapide à les rappeler.\"\n    }\n  ],\n  \"result_data\": {\n    \"score\": 87,\n    \"recommendation\": \"premium\"\n  },\n  \"completed_at\": \"2026-05-04T12:34:56.789Z\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"contact_id\": \"8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3\",\n  \"contact_created\": false,\n  \"activity_id\": \"1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8134f54d-fedb-417a-af5c-0d48a5f4d481",
              "name": "Invalid JSON body or invalid Zod payload. **Legacy\nconvention** — custom `{error, issues?}` body that does not follow the\nv1 catalog's `ErrorEnvelope`.\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "presuasion-submissions"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "HMAC SHA-256 signature computed by the gateway over\n`${timestamp}.${rawBody}` with `PRESUASION_HMAC_SECRET`. 5-minute\nreplay window. Optional in log-only mode; required\nwhen `PRESUASION_HMAC_REQUIRED=true` (401 response otherwise).\n",
                    "key": "X-Capturia-Signature",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"proposition_slug\": \"blueprint-ventes-2026\",\n  \"tool_id\": \"calculateur-roi\",\n  \"tool_name\": \"Calculateur de ROI\",\n  \"email\": \"alex@example.com\",\n  \"first_name\": \"Alex\",\n  \"phone\": \"+15145551234\",\n  \"responses\": {\n    \"budget\": \"500-1000\",\n    \"timeline\": \"3-mois\"\n  },\n  \"formatted_answers\": [\n    {\n      \"question\": \"Quel est ton défi principal en ventes ?\",\n      \"answer\": \"Je perds des leads parce que je ne suis pas assez rapide à les rappeler.\"\n    }\n  ],\n  \"result_data\": {\n    \"score\": 87,\n    \"recommendation\": \"premium\"\n  },\n  \"completed_at\": \"2026-05-04T12:34:56.789Z\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"Invalid JSON body\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "6fc39a0b-0122-4287-8676-0ec9a3939bf8",
              "name": "`X-Capturia-Signature` HMAC signature missing, malformed,\nexpired (5-minute window), or invalid. Returned only when\n`PRESUASION_HMAC_REQUIRED=true` (fail-closed mode). In log-only\nmode, unsigned requests go through and a warning is\nemitted for observability.\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "presuasion-submissions"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "HMAC SHA-256 signature computed by the gateway over\n`${timestamp}.${rawBody}` with `PRESUASION_HMAC_SECRET`. 5-minute\nreplay window. Optional in log-only mode; required\nwhen `PRESUASION_HMAC_REQUIRED=true` (401 response otherwise).\n",
                    "key": "X-Capturia-Signature",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"proposition_slug\": \"blueprint-ventes-2026\",\n  \"tool_id\": \"calculateur-roi\",\n  \"tool_name\": \"Calculateur de ROI\",\n  \"email\": \"alex@example.com\",\n  \"first_name\": \"Alex\",\n  \"phone\": \"+15145551234\",\n  \"responses\": {\n    \"budget\": \"500-1000\",\n    \"timeline\": \"3-mois\"\n  },\n  \"formatted_answers\": [\n    {\n      \"question\": \"Quel est ton défi principal en ventes ?\",\n      \"answer\": \"Je perds des leads parce que je ne suis pas assez rapide à les rappeler.\"\n    }\n  ],\n  \"result_data\": {\n    \"score\": 87,\n    \"recommendation\": \"premium\"\n  },\n  \"completed_at\": \"2026-05-04T12:34:56.789Z\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"Invalid signature\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "c3941a5e-3e82-4576-a335-7abe561c66d2",
              "name": "Cloudflare Turnstile token missing, expired, or rejected by\nsiteverify. Returned only when\n`PRESUASION_TURNSTILE_REQUIRED=true` (fail-closed mode).\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "presuasion-submissions"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "HMAC SHA-256 signature computed by the gateway over\n`${timestamp}.${rawBody}` with `PRESUASION_HMAC_SECRET`. 5-minute\nreplay window. Optional in log-only mode; required\nwhen `PRESUASION_HMAC_REQUIRED=true` (401 response otherwise).\n",
                    "key": "X-Capturia-Signature",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"proposition_slug\": \"blueprint-ventes-2026\",\n  \"tool_id\": \"calculateur-roi\",\n  \"tool_name\": \"Calculateur de ROI\",\n  \"email\": \"alex@example.com\",\n  \"first_name\": \"Alex\",\n  \"phone\": \"+15145551234\",\n  \"responses\": {\n    \"budget\": \"500-1000\",\n    \"timeline\": \"3-mois\"\n  },\n  \"formatted_answers\": [\n    {\n      \"question\": \"Quel est ton défi principal en ventes ?\",\n      \"answer\": \"Je perds des leads parce que je ne suis pas assez rapide à les rappeler.\"\n    }\n  ],\n  \"result_data\": {\n    \"score\": 87,\n    \"recommendation\": \"premium\"\n  },\n  \"completed_at\": \"2026-05-04T12:34:56.789Z\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"Captcha verification failed\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f586f9d2-689a-45a2-80fb-2fea4e415918",
              "name": "Unknown or disabled `proposition_slug`\n(`presuasion_instances.is_active = false`).\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "presuasion-submissions"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "HMAC SHA-256 signature computed by the gateway over\n`${timestamp}.${rawBody}` with `PRESUASION_HMAC_SECRET`. 5-minute\nreplay window. Optional in log-only mode; required\nwhen `PRESUASION_HMAC_REQUIRED=true` (401 response otherwise).\n",
                    "key": "X-Capturia-Signature",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"proposition_slug\": \"blueprint-ventes-2026\",\n  \"tool_id\": \"calculateur-roi\",\n  \"tool_name\": \"Calculateur de ROI\",\n  \"email\": \"alex@example.com\",\n  \"first_name\": \"Alex\",\n  \"phone\": \"+15145551234\",\n  \"responses\": {\n    \"budget\": \"500-1000\",\n    \"timeline\": \"3-mois\"\n  },\n  \"formatted_answers\": [\n    {\n      \"question\": \"Quel est ton défi principal en ventes ?\",\n      \"answer\": \"Je perds des leads parce que je ne suis pas assez rapide à les rappeler.\"\n    }\n  ],\n  \"result_data\": {\n    \"score\": 87,\n    \"recommendation\": \"premium\"\n  },\n  \"completed_at\": \"2026-05-04T12:34:56.789Z\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"Proposition not found or inactive\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "a8601411-44d5-4c1e-b268-b74e1160b8f8",
              "name": "Two variants, refused before any database write (no\ncontact, activity, or enrichment):\n\n* **Unlinked demo** — the `proposition_slug` exists but the\n  proposal is not linked to any Capturia account\n  (`client_id IS NULL`). A demo without an account never creates a\n  contact: the submission is explicitly refused rather than\n  faked as a success, and the refusal is logged on the Capturia side.\n* **Invalid link identity** — `identity_confirmed: true` while\n  the `token` no longer resolves to any contact of this account. No\n  contact is created from an identity that cannot be found. This\n  variant is evaluated after the per-`proposition_slug` quota:\n  when the signature and Turnstile are valid, it consumes one\n  unit of the daily quota. The unlinked demo consumes\n  none.\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "presuasion-submissions"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "HMAC SHA-256 signature computed by the gateway over\n`${timestamp}.${rawBody}` with `PRESUASION_HMAC_SECRET`. 5-minute\nreplay window. Optional in log-only mode; required\nwhen `PRESUASION_HMAC_REQUIRED=true` (401 response otherwise).\n",
                    "key": "X-Capturia-Signature",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"proposition_slug\": \"blueprint-ventes-2026\",\n  \"tool_id\": \"calculateur-roi\",\n  \"tool_name\": \"Calculateur de ROI\",\n  \"email\": \"alex@example.com\",\n  \"first_name\": \"Alex\",\n  \"phone\": \"+15145551234\",\n  \"responses\": {\n    \"budget\": \"500-1000\",\n    \"timeline\": \"3-mois\"\n  },\n  \"formatted_answers\": [\n    {\n      \"question\": \"Quel est ton défi principal en ventes ?\",\n      \"answer\": \"Je perds des leads parce que je ne suis pas assez rapide à les rappeler.\"\n    }\n  ],\n  \"result_data\": {\n    \"score\": 87,\n    \"recommendation\": \"premium\"\n  },\n  \"completed_at\": \"2026-05-04T12:34:56.789Z\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"Proposition not linked to a Capturia client\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "df850cbc-903e-4ccc-8cba-de410407ee0c",
              "name": "Two possible variants:\n\n* **IP rate limit exceeded** — `{error: \"Too many requests\"}` body,\n  `X-RateLimit-*` headers (legacy convention).\n* **Per-`proposition_slug` quota exceeded** (100/UTC day) — body\n  `{error: \"Slug quota exceeded\"}` with the standard\n  `Retry-After` header (seconds until UTC midnight) in addition to the\n  `X-RateLimit-*` headers.\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "presuasion-submissions"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "HMAC SHA-256 signature computed by the gateway over\n`${timestamp}.${rawBody}` with `PRESUASION_HMAC_SECRET`. 5-minute\nreplay window. Optional in log-only mode; required\nwhen `PRESUASION_HMAC_REQUIRED=true` (401 response otherwise).\n",
                    "key": "X-Capturia-Signature",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"proposition_slug\": \"blueprint-ventes-2026\",\n  \"tool_id\": \"calculateur-roi\",\n  \"tool_name\": \"Calculateur de ROI\",\n  \"email\": \"alex@example.com\",\n  \"first_name\": \"Alex\",\n  \"phone\": \"+15145551234\",\n  \"responses\": {\n    \"budget\": \"500-1000\",\n    \"timeline\": \"3-mois\"\n  },\n  \"formatted_answers\": [\n    {\n      \"question\": \"Quel est ton défi principal en ventes ?\",\n      \"answer\": \"Je perds des leads parce que je ne suis pas assez rapide à les rappeler.\"\n    }\n  ],\n  \"result_data\": {\n    \"score\": 87,\n    \"recommendation\": \"premium\"\n  },\n  \"completed_at\": \"2026-05-04T12:34:56.789Z\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"Too many requests\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "34f58413-96b9-465c-82d5-0e0ee14893b8",
              "name": "Server error (proposal lookup, contact upsert, or activity\ninsert). **Legacy convention** — custom body\n`{error: \"string\"}` instead of `ErrorEnvelope`.\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "presuasion-submissions"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "HMAC SHA-256 signature computed by the gateway over\n`${timestamp}.${rawBody}` with `PRESUASION_HMAC_SECRET`. 5-minute\nreplay window. Optional in log-only mode; required\nwhen `PRESUASION_HMAC_REQUIRED=true` (401 response otherwise).\n",
                    "key": "X-Capturia-Signature",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"proposition_slug\": \"blueprint-ventes-2026\",\n  \"tool_id\": \"calculateur-roi\",\n  \"tool_name\": \"Calculateur de ROI\",\n  \"email\": \"alex@example.com\",\n  \"first_name\": \"Alex\",\n  \"phone\": \"+15145551234\",\n  \"responses\": {\n    \"budget\": \"500-1000\",\n    \"timeline\": \"3-mois\"\n  },\n  \"formatted_answers\": [\n    {\n      \"question\": \"Quel est ton défi principal en ventes ?\",\n      \"answer\": \"Je perds des leads parce que je ne suis pas assez rapide à les rappeler.\"\n    }\n  ],\n  \"result_data\": {\n    \"score\": 87,\n    \"recommendation\": \"premium\"\n  },\n  \"completed_at\": \"2026-05-04T12:34:56.789Z\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"Server error\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "50bcdfca-c990-4d50-9cd4-9efd20429bb8",
      "name": "Events",
      "description": {
        "content": "Ingest custom events that trigger automations, and register a contact\nfor one of the account's events (webinar, challenge, summit, online\nevent)\n",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "983d6faa-05c2-48c6-b874-b40e5d86d808",
          "name": "Push a custom event that triggers automations",
          "request": {
            "name": "Push a custom event that triggers automations",
            "description": {
              "content": "Generic inbound webhook per account: an external source (Zapier, Make,\nn8n, a client backend, a third-party tool) pushes a named event with\nits data. Capturia resolves the contact (`external_id` → `phone` →\n`email`), enriches the contact non-destructively, fills in the mapped custom\nfields, records the event on the contact, then starts\nthe automations whose \"Custom event\" trigger\nlistens for this event name — with the `payload` available in\nmessages through `{{event.<key>}}`.\n\n### Contact resolution\nAt least one identifier is required (`external_id`, `email` or `phone`).\nIf no contact matches, a minimal contact is created — unless\n`contact.create_if_missing` is `false`, in which case the request returns\n`404 contact_not_found` without recording anything. If the identifiers\nonly match an **archived** contact, the event is recorded on it\n(for traceability) but the contact is not modified and no automation\nis enrolled (`contact_archived: true`).\n\n### Consent (Law 25 / CASL)\nReceiving an event does **not** establish any communication\nconsent. A contact created through this path cannot receive\nSMS/email until consent is captured through another flow;\na triggered automation that tries to send without consent\nis blocked by the execution engine's guards.\n\n### Optional HMAC signature\nIn addition to the API key, the request can carry a signature\n`X-Capturia-Signature: t=<unix>,v1=<hex>` — an HMAC-SHA256 of\n`${t}.${raw body}` computed with **the raw API key as the secret**,\nwith a 5-minute anti-replay window. As soon as the header is present,\nvalidation is strict (fail-closed): an invalid signature = `401\ninvalid_signature`. Without the header, the API key alone authenticates the request.\n\n### Idempotency\nThe `Idempotency-Key` header is optional but recommended for\nretries: a second request with the same key and the same payload returns the\noriginal response without ingesting the event again (stored for 24h; a\ndifferent payload = `409 idempotency_conflict`). In addition, automation\nenrollment has its own 5-minute deduplication per contact and per\nautomation.\n\n### Custom error codes\n- **429** — `rate_limited_ip` when the IP rate limit (120 req/min) is\n  reached, with header `X-RateLimit-Scope: ip`. Per-key limit: 60 req/min\n  (adjustable per key).\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "events"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                "key": "Idempotency-Key",
                "value": "<string>"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"event\": \"<string>\",\n  \"contact\": {\n    \"external_id\": \"<string>\",\n    \"external_source\": \"<string>\",\n    \"email\": \"<email>\",\n    \"phone\": \"<string>\",\n    \"first_name\": \"<string>\",\n    \"last_name\": \"<string>\",\n    \"create_if_missing\": true\n  },\n  \"payload\": {\n    \"key_0\": 9530.5681411594,\n    \"key_1\": false\n  },\n  \"custom_fields\": {\n    \"key_0\": false,\n    \"key_1\": 2987,\n    \"key_2\": false\n  },\n  \"source_label\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "b44aec7f-f9eb-474f-8abb-7a14b9e2882f",
              "name": "Event ingested (`status: ingested`). `enrolled_executions` tells you\nhow many automations started; `0` means no\nactive automation listens for this event name — the event is\nstill recorded on the contact.\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "events"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"abandon_panier\",\n  \"contact\": {\n    \"external_id\": \"user-4821\",\n    \"external_source\": \"mon-backend\",\n    \"email\": \"alex@example.com\",\n    \"first_name\": \"Alex\"\n  },\n  \"payload\": {\n    \"montant\": 249.99,\n    \"produit\": \"Forfait Pro\",\n    \"url_panier\": \"https://boutique.example.com/panier/abc123\"\n  },\n  \"custom_fields\": {\n    \"plan_vise\": \"pro\"\n  },\n  \"source_label\": \"Boutique en ligne\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"ingested\",\n  \"contact_id\": \"0a1b2c3d-4e5f-6a7b-8c9d-0e1f2a3b4c5d\",\n  \"contact_created\": false,\n  \"contact_archived\": false,\n  \"activity_id\": \"1b2c3d4e-5f6a-7b8c-9d0e-1f2a3b4c5d6e\",\n  \"enrolled_executions\": 1,\n  \"event\": \"abandon_panier\",\n  \"message\": \"Event ingested. 1 automation(s) enrolled.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8fcbc2d0-b2f4-492a-bcd1-2bbbd18cafe1",
              "name": "The request is malformed (missing header, invalid JSON, invalid parameter).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "events"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"abandon_panier\",\n  \"contact\": {\n    \"external_id\": \"user-4821\",\n    \"external_source\": \"mon-backend\",\n    \"email\": \"alex@example.com\",\n    \"first_name\": \"Alex\"\n  },\n  \"payload\": {\n    \"montant\": 249.99,\n    \"produit\": \"Forfait Pro\",\n    \"url_panier\": \"https://boutique.example.com/panier/abc123\"\n  },\n  \"custom_fields\": {\n    \"plan_vise\": \"pro\"\n  },\n  \"source_label\": \"Boutique en ligne\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_request\",\n    \"message\": \"Le paramètre 'cursor' est invalide ou expiré.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#invalid_request\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"field\": \"cursor\",\n      \"reason\": \"malformed_base64\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "26732422-ab06-450d-b17c-e72879dd33bb",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "events"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"abandon_panier\",\n  \"contact\": {\n    \"external_id\": \"user-4821\",\n    \"external_source\": \"mon-backend\",\n    \"email\": \"alex@example.com\",\n    \"first_name\": \"Alex\"\n  },\n  \"payload\": {\n    \"montant\": 249.99,\n    \"produit\": \"Forfait Pro\",\n    \"url_panier\": \"https://boutique.example.com/panier/abc123\"\n  },\n  \"custom_fields\": {\n    \"plan_vise\": \"pro\"\n  },\n  \"source_label\": \"Boutique en ligne\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d37d65ef-a656-40cc-b2dd-0920e3e8177f",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "events"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"abandon_panier\",\n  \"contact\": {\n    \"external_id\": \"user-4821\",\n    \"external_source\": \"mon-backend\",\n    \"email\": \"alex@example.com\",\n    \"first_name\": \"Alex\"\n  },\n  \"payload\": {\n    \"montant\": 249.99,\n    \"produit\": \"Forfait Pro\",\n    \"url_panier\": \"https://boutique.example.com/panier/abc123\"\n  },\n  \"custom_fields\": {\n    \"plan_vise\": \"pro\"\n  },\n  \"source_label\": \"Boutique en ligne\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "58596a88-f081-4623-8d01-f1432f01289e",
              "name": "The requested resource doesn't exist (or isn't within the tenant's scope).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "events"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"abandon_panier\",\n  \"contact\": {\n    \"external_id\": \"user-4821\",\n    \"external_source\": \"mon-backend\",\n    \"email\": \"alex@example.com\",\n    \"first_name\": \"Alex\"\n  },\n  \"payload\": {\n    \"montant\": 249.99,\n    \"produit\": \"Forfait Pro\",\n    \"url_panier\": \"https://boutique.example.com/panier/abc123\"\n  },\n  \"custom_fields\": {\n    \"plan_vise\": \"pro\"\n  },\n  \"source_label\": \"Boutique en ligne\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"not_found_error\",\n    \"code\": \"resource_not_found\",\n    \"message\": \"Le contact demandé n'existe pas.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#resource_not_found\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "12b2ed4e-857b-4d13-b98b-1e5849f2fbe3",
              "name": "A previous request with the same `Idempotency-Key` used a different payload,\nor is still being processed.\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "events"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"abandon_panier\",\n  \"contact\": {\n    \"external_id\": \"user-4821\",\n    \"external_source\": \"mon-backend\",\n    \"email\": \"alex@example.com\",\n    \"first_name\": \"Alex\"\n  },\n  \"payload\": {\n    \"montant\": 249.99,\n    \"produit\": \"Forfait Pro\",\n    \"url_panier\": \"https://boutique.example.com/panier/abc123\"\n  },\n  \"custom_fields\": {\n    \"plan_vise\": \"pro\"\n  },\n  \"source_label\": \"Boutique en ligne\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"idempotency_error\",\n    \"code\": \"idempotency_conflict\",\n    \"message\": \"Une requête avec cette Idempotency-Key existe avec un payload différent.\",\n    \"hint\": \"Utilise une nouvelle Idempotency-Key, ou rejoue la requête originale à l'identique.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/conventions#idempotency\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"idempotency_key\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n      \"original_request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T6\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "546be8b6-f33f-4a55-b9a8-024e527ed7dc",
              "name": "Parameter or body validation failed.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "events"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"abandon_panier\",\n  \"contact\": {\n    \"external_id\": \"user-4821\",\n    \"external_source\": \"mon-backend\",\n    \"email\": \"alex@example.com\",\n    \"first_name\": \"Alex\"\n  },\n  \"payload\": {\n    \"montant\": 249.99,\n    \"produit\": \"Forfait Pro\",\n    \"url_panier\": \"https://boutique.example.com/panier/abc123\"\n  },\n  \"custom_fields\": {\n    \"plan_vise\": \"pro\"\n  },\n  \"source_label\": \"Boutique en ligne\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"validation_error\",\n    \"message\": \"Le champ 'email' est requis.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#validation_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"validation_errors\": [\n        {\n          \"path\": \"/email\",\n          \"reason\": \"required\"\n        }\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1a144f09-e098-4805-bdb7-1984607a8d43",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "events"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"abandon_panier\",\n  \"contact\": {\n    \"external_id\": \"user-4821\",\n    \"external_source\": \"mon-backend\",\n    \"email\": \"alex@example.com\",\n    \"first_name\": \"Alex\"\n  },\n  \"payload\": {\n    \"montant\": 249.99,\n    \"produit\": \"Forfait Pro\",\n    \"url_panier\": \"https://boutique.example.com/panier/abc123\"\n  },\n  \"custom_fields\": {\n    \"plan_vise\": \"pro\"\n  },\n  \"source_label\": \"Boutique en ligne\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "486e7a92-3847-47cd-99c8-83558663d799",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "events"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "disabled": false,
                    "description": "Idempotency key (UUID v4 or ULID recommended). A second request with the same key and the same payload\nreturns the original response without repeating the operation. Stored for 24h. Optional but recommended.\n",
                    "key": "Idempotency-Key",
                    "value": "<string>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"abandon_panier\",\n  \"contact\": {\n    \"external_id\": \"user-4821\",\n    \"external_source\": \"mon-backend\",\n    \"email\": \"alex@example.com\",\n    \"first_name\": \"Alex\"\n  },\n  \"payload\": {\n    \"montant\": 249.99,\n    \"produit\": \"Forfait Pro\",\n    \"url_panier\": \"https://boutique.example.com/panier/abc123\"\n  },\n  \"custom_fields\": {\n    \"plan_vise\": \"pro\"\n  },\n  \"source_label\": \"Boutique en ligne\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "4679238a-2453-45c1-8e65-33c37e3120a4",
          "name": "Register a contact for an event",
          "request": {
            "name": "Register a contact for an event",
            "description": {
              "content": "Registers an existing contact of the account for a published event\n(webinar, challenge, summit, online event). The person then receives\nthe event's messages, just as if they had registered\nthrough its page.\n\nOne registration per person and per edition: a second call\nfor the same contact and the same edition returns the same registration with\n`200` and `created: false`, without resending the confirmation. It updates the\nlanguage, and re-registers a person who had said they would not\nattend; a person who asked to stop receiving messages stays\nopted out. The call is therefore safe to retry, without an\n`Idempotency-Key` header.\n\nRequires the plan's Event support module\n(`403 feature_not_available` otherwise) and the `contacts:write` scope.\n\n### Rejections\n\n- `404 resource_not_found` with `details.resource`: `contact`\n  (contact missing, merged or from another account), `event` or\n  `edition`.\n- `422 business_rule_violation` with `details.rule`:\n  `event_not_published` (draft), `event_closed` (event\n  archived, edition cancelled, or no upcoming edition),\n  `event_edition_ended` (edition ended).\n- `400 validation_error`: invalid body, or `event_id` and\n  `event_slug` both present or both missing.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "event-registrations"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"contact_id\": \"<uuid>\",\n  \"event_id\": \"<uuid>\",\n  \"event_slug\": \"<string>\",\n  \"edition_id\": \"<uuid>\",\n  \"language\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "ef271611-3ed3-4e67-b15e-19f2689f688a",
              "name": "The contact was already registered for this edition; the same registration is returned.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "event-registrations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"9b8a7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d\",\n  \"event_slug\": \"defi-5-jours\",\n  \"language\": \"fr\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"5d2c1b0a-9e8f-4a7b-8c6d-5e4f3a2b1c0d\",\n    \"event_id\": \"7a6b5c4d-3e2f-4a1b-9c8d-7e6f5a4b3c2d\",\n    \"edition_id\": \"1f2e3d4c-5b6a-4978-8695-a4b3c2d1e0f9\",\n    \"contact_id\": \"9b8a7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d\",\n    \"language\": \"fr\",\n    \"created\": false\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d3874f7f-e778-44b4-bf88-61cba6082e62",
              "name": "Registration created.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "event-registrations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"9b8a7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d\",\n  \"event_slug\": \"defi-5-jours\",\n  \"language\": \"fr\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "disabled": false,
                  "description": "ULID of the request, which support can use for debugging.",
                  "key": "X-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Alias of X-Request-ID (for compatibility with clients that filter legacy `X-*` headers).",
                  "key": "Capturia-Request-ID",
                  "value": "req_4NP85MBZCC5TD8W3TNE0F1VFHS"
                },
                {
                  "disabled": false,
                  "description": "Version of the API that served the response (always `v1` today).",
                  "key": "Capturia-Version",
                  "value": "v1"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"5d2c1b0a-9e8f-4a7b-8c6d-5e4f3a2b1c0d\",\n    \"event_id\": \"7a6b5c4d-3e2f-4a1b-9c8d-7e6f5a4b3c2d\",\n    \"edition_id\": \"1f2e3d4c-5b6a-4978-8695-a4b3c2d1e0f9\",\n    \"contact_id\": \"9b8a7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d\",\n    \"language\": \"fr\",\n    \"created\": true\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "a0b94562-7b6b-4fb3-a9d5-2279112bbad4",
              "name": "Parameter or body validation failed.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "event-registrations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"9b8a7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d\",\n  \"event_slug\": \"defi-5-jours\",\n  \"language\": \"fr\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"validation_error\",\n    \"message\": \"Le champ 'email' est requis.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#validation_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"validation_errors\": [\n        {\n          \"path\": \"/email\",\n          \"reason\": \"required\"\n        }\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "4515f97c-d204-49cd-99e3-c6e766fc785b",
              "name": "Unknown API key or invalid format.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "event-registrations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"9b8a7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d\",\n  \"event_slug\": \"defi-5-jours\",\n  \"language\": \"fr\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authentication_error\",\n    \"code\": \"invalid_api_key\",\n    \"message\": \"La clé API fournie est invalide.\",\n    \"hint\": \"Vérifie que tu utilises la valeur complète affichée à la création de la clé.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#invalid_api_key\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "88c4e965-13ad-4df3-8520-0f4a566bfa24",
              "name": "Authorization denied. Two causes, distinguished by `code`: `insufficient_scope` (the key lacks the required scope — `details.required_scope`) or `feature_not_available` (the public API or the targeted module isn't included in the account's plan — `details.feature` names the feature, e.g. `public_api`, `quotes`). A plan denial is final for the key: don't retry; the account must change plans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "event-registrations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"9b8a7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d\",\n  \"event_slug\": \"defi-5-jours\",\n  \"language\": \"fr\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"authorization_error\",\n    \"code\": \"insufficient_scope\",\n    \"message\": \"Cette opération requiert le scope `contacts:write`.\",\n    \"hint\": \"Édite la clé pour lui ajouter le scope manquant, ou utilise une clé avec un scope plus large.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/authentication#scopes\",\n    \"dashboard_url\": \"https://app.capturia.io/platform/dashboard/admin/integrations/api-keys/ak_01J9X8Z3F4K2M5N7P9Q1R3S5T7?tab=permissions\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"required_scope\": \"contacts:write\",\n      \"current_scopes\": [\n        \"contacts:read\",\n        \"leads:capture\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "4d824c7d-3053-4105-a2e5-6cdcb9aff108",
              "name": "The requested resource doesn't exist (or isn't within the tenant's scope).",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "event-registrations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"9b8a7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d\",\n  \"event_slug\": \"defi-5-jours\",\n  \"language\": \"fr\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"not_found_error\",\n    \"code\": \"resource_not_found\",\n    \"message\": \"Le contact demandé n'existe pas.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#resource_not_found\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"resource\": \"contact\",\n      \"id\": \"01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e21a5887-e84d-4aa7-9547-43b668d840cd",
              "name": "The `Content-Type` header is missing or not supported for this endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "event-registrations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"9b8a7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d\",\n  \"event_slug\": \"defi-5-jours\",\n  \"language\": \"fr\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unsupported Media Type",
              "code": 415,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"code\": \"invalid_content_type\",\n    \"message\": \"Content-Type `text/plain` non supporté. Utilise `application/json`.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/conventions#content-type\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"received\": \"text/plain\",\n      \"expected\": [\n        \"application/json\"\n      ]\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "5ab3dc8a-d1da-4687-8aa6-3a16907284a8",
              "name": "The request is syntactically valid but violates a business rule.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "event-registrations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"9b8a7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d\",\n  \"event_slug\": \"defi-5-jours\",\n  \"language\": \"fr\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"business_rule_error\",\n    \"code\": \"business_rule_violation\",\n    \"message\": \"Impossible d'envoyer un devis déjà accepté.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#business_rule_violation\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"rule\": \"quote_already_accepted\",\n      \"current_state\": \"accepted\"\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9709c925-3a08-4d76-8776-848688357a52",
              "name": "The per-window request quota has been exceeded for this API key or endpoint.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "event-registrations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"9b8a7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d\",\n  \"event_slug\": \"defi-5-jours\",\n  \"language\": \"fr\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Request limit per window (RFC 9331).",
                  "key": "RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Requests remaining in the current window (RFC 9331).",
                  "key": "RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Seconds until the window resets (RFC 9331, delta-seconds).",
                  "key": "RateLimit-Reset",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Rate limit policy in structured format (RFC 9331), e.g. `100;w=3600`.",
                  "key": "RateLimit-Policy",
                  "value": "100;w=3600"
                },
                {
                  "disabled": false,
                  "description": "Request limit (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Limit",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "Remaining requests (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Remaining",
                  "value": "6751"
                },
                {
                  "disabled": false,
                  "description": "ISO timestamp of the reset (legacy, sunset 2027-05-03).",
                  "key": "X-RateLimit-Reset",
                  "value": "2009-06-04T15:51:32.974Z"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"rate_limit_error\",\n    \"code\": \"rate_limit_exceeded\",\n    \"message\": \"Quota de requêtes dépassé. Réessaie dans 42 secondes.\",\n    \"hint\": \"Lis les headers `RateLimit-*` pour connaître la limite et le reset.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/rate-limits\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"limit_type\": \"per_key\",\n      \"retry_after_seconds\": 42\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "27bd5b72-e956-41e6-8609-a7bcb09dbe19",
              "name": "Unexpected server error. Always include the `request_id` when contacting support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "event-registrations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"9b8a7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d\",\n  \"event_slug\": \"defi-5-jours\",\n  \"language\": \"fr\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"internal_error\",\n    \"message\": \"Une erreur interne est survenue. L'incident a été reporté.\",\n    \"hint\": \"Réessaie dans quelques secondes. Si l'erreur persiste, contacte le support avec le request_id.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#internal_error\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "079ef690-115e-4641-a099-dacb51324020",
              "name": "Service temporarily unavailable (maintenance, external dependency down, degraded infrastructure).\nClients should retry with exponential backoff.\n",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "event-registrations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "description": {
                      "content": "Added as a part of security scheme: bearer",
                      "type": "text/plain"
                    },
                    "key": "Authorization",
                    "value": "Bearer <token>"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"contact_id\": \"9b8a7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d\",\n  \"event_slug\": \"defi-5-jours\",\n  \"language\": \"fr\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": false,
                  "description": "Seconds to wait before retrying (RFC 7231). Sent with 429 and 503.",
                  "key": "Retry-After",
                  "value": "6751"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"type\": \"server_error\",\n    \"code\": \"service_unavailable\",\n    \"message\": \"Service temporairement indisponible. Réessaie dans quelques secondes.\",\n    \"hint\": \"Implémente un backoff exponentiel et respecte le header `Retry-After`.\",\n    \"doc_url\": \"https://capturia.io/fr/developers/api/v1/errors#service_unavailable\",\n    \"request_id\": \"req_01J9X8Z3F4K2M5N7P9Q1R3S5T7\",\n    \"details\": {\n      \"retry_after_seconds\": 30\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    }
  ],
  "event": [],
  "variable": [
    {
      "type": "string",
      "value": "https://api.capturia.io",
      "key": "baseUrl"
    }
  ],
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{bearerToken}}"
      }
    ]
  },
  "info": {
    "_postman_id": "82d28e83-df28-4cf3-94d8-44c55714fda1",
    "name": "Capturia API",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "description": {
      "content": "The Capturia API lets you integrate Capturia with third-party tools (Make, Zapier,\ncustom code, external CRMs) through REST endpoints authenticated with an API key.\n\n## Quickstart\n\n1. Create an API key in the dashboard: `Admin → Integrations → API Keys`\n2. Pick the matching preset (`Lead capture` to push leads from a funnel)\n3. Call `GET /v1/me` to confirm the key works\n4. Capture a lead: `POST /v1/leads/capture`\n\nFull documentation: https://capturia.io/en/developers\n\n\nContact Support:\n Name: Capturia Support\n Email: support@capturia.io",
      "type": "text/plain"
    }
  }
}
