{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-guides/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["code-group"]},"type":"markdown"},"seo":{"title":"Creating clients and mandates"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"creating-clients-and-mandates","__idx":0},"children":["Creating clients and mandates"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This guide walks you through registering a client and creating mandates covering the four supported directory entry types."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"prerequisites","__idx":1},"children":["Prerequisites"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A valid API token (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Authorization: <token>"]}," header)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Base URL: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://pdp.seqino.dev/api"]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-1-create-a-client","__idx":2},"children":["Step 1: Create a client"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["client"]}," represents a company you manage invoicing for. Each client gets a unique ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_id"]}," that you'll pass as the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-PDP-Client-Id"]}," header in subsequent calls."]},{"$$mdtype":"Tag","name":"CodeGroup","attributes":{"mode":"tabs"},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","data-title":"cURL","header":{"title":"cURL","controls":{"copy":{}}},"source":"curl -X POST https://pdp.seqino.dev/api/clients \\\n  -H \"Authorization: <your-token>\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"organization_name\": \"Dupont & Fils SAS\",\n    \"contact_email\": \"facturation@dupont-fils.fr\",\n    \"external_ref\": \"CLIENT-001\"\n  }'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","data-title":"Python","header":{"title":"Python","controls":{"copy":{}}},"source":"import httpx\n\nclient = httpx.Client(base_url=\"https://pdp.seqino.dev/api\", headers={\"Authorization\": \"<your-token>\"})\n\nresponse = client.post(\"/clients\", json={\n    \"organization_name\": \"Dupont & Fils SAS\",\n    \"contact_email\": \"facturation@dupont-fils.fr\",\n    \"external_ref\": \"CLIENT-001\",\n})\nresponse.raise_for_status()\nclient_id = response.json()[\"id\"]\nprint(f\"Client ID: {client_id}\")\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"typescript","data-title":"TypeScript","header":{"title":"TypeScript","controls":{"copy":{}}},"source":"const response = await fetch(\"https://pdp.seqino.dev/api/clients\", {\n  method: \"POST\",\n  headers: {\n    \"Authorization\": \"<your-token>\",\n    \"Content-Type\": \"application/json\",\n  },\n  body: JSON.stringify({\n    organization_name: \"Dupont & Fils SAS\",\n    contact_email: \"facturation@dupont-fils.fr\",\n    external_ref: \"CLIENT-001\",\n  }),\n});\nconst { id: clientId } = await response.json();\nconsole.log(\"Client ID:\", clientId);\n","lang":"typescript"},"children":[]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The response returns the created client object including its ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]},". Save this value — you'll use it as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-PDP-Client-Id"]}," for all mandate operations below."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-2-create-mandates","__idx":3},"children":["Step 2: Create mandates"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["mandate"]}," authorizes your client to send or receive invoices on behalf of a specific directory entry. The scope of the mandate is determined by which identifier fields you provide."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["All mandate requests require the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-PDP-Client-Id"]}," header set to the client ID from Step 1."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"siren-mandate","__idx":4},"children":["SIREN mandate"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Covers all establishments under a company. Use when the counterpart hasn't specified a more granular routing."]},{"$$mdtype":"Tag","name":"CodeGroup","attributes":{"mode":"tabs"},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","data-title":"cURL","header":{"title":"cURL","controls":{"copy":{}}},"source":"curl -X POST https://pdp.seqino.dev/api/mandates \\\n  -H \"Authorization: <your-token>\" \\\n  -H \"X-PDP-Client-Id: <client-id>\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"start_date\": \"2026-01-01T00:00:00Z\",\n    \"directory_entry\": {\n      \"siren\": \"123456789\",\n      \"name\": \"Dupont & Fils SAS\"\n    }\n  }'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","data-title":"Python","header":{"title":"Python","controls":{"copy":{}}},"source":"response = client.post(\"/mandates\",\n    headers={\"X-PDP-Client-Id\": client_id},\n    json={\n        \"start_date\": \"2026-01-01T00:00:00Z\",\n        \"directory_entry\": {\n            \"siren\": \"123456789\",\n            \"name\": \"Dupont & Fils SAS\",\n        },\n    },\n)\nresponse.raise_for_status()\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"typescript","data-title":"TypeScript","header":{"title":"TypeScript","controls":{"copy":{}}},"source":"await fetch(\"https://pdp.seqino.dev/api/mandates\", {\n  method: \"POST\",\n  headers: {\n    \"Authorization\": \"<your-token>\",\n    \"X-PDP-Client-Id\": clientId,\n    \"Content-Type\": \"application/json\",\n  },\n  body: JSON.stringify({\n    start_date: \"2026-01-01T00:00:00Z\",\n    directory_entry: {\n      siren: \"123456789\",\n      name: \"Dupont & Fils SAS\",\n    },\n  }),\n});\n","lang":"typescript"},"children":[]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"siren--suffix-mandate","__idx":5},"children":["SIREN + suffix mandate"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Targets a specific service or department within a company, identified by a free-form suffix. Use this when the counterpart routes invoices by department (e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Achats"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DAF"]},")."]},{"$$mdtype":"Tag","name":"CodeGroup","attributes":{"mode":"tabs"},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","data-title":"cURL","header":{"title":"cURL","controls":{"copy":{}}},"source":"curl -X POST https://pdp.seqino.dev/api/mandates \\\n  -H \"Authorization: <your-token>\" \\\n  -H \"X-PDP-Client-Id: <client-id>\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"start_date\": \"2026-01-01T00:00:00Z\",\n    \"directory_entry\": {\n      \"siren\": \"123456789\",\n      \"name\": \"Dupont & Fils SAS\",\n      \"suffix\": \"Achats\"\n    }\n  }'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","data-title":"Python","header":{"title":"Python","controls":{"copy":{}}},"source":"response = client.post(\"/mandates\",\n    headers={\"X-PDP-Client-Id\": client_id},\n    json={\n        \"start_date\": \"2026-01-01T00:00:00Z\",\n        \"directory_entry\": {\n            \"siren\": \"123456789\",\n            \"name\": \"Dupont & Fils SAS\",\n            \"suffix\": \"Achats\",\n        },\n    },\n)\nresponse.raise_for_status()\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"typescript","data-title":"TypeScript","header":{"title":"TypeScript","controls":{"copy":{}}},"source":"await fetch(\"https://pdp.seqino.dev/api/mandates\", {\n  method: \"POST\",\n  headers: {\n    \"Authorization\": \"<your-token>\",\n    \"X-PDP-Client-Id\": clientId,\n    \"Content-Type\": \"application/json\",\n  },\n  body: JSON.stringify({\n    start_date: \"2026-01-01T00:00:00Z\",\n    directory_entry: {\n      siren: \"123456789\",\n      name: \"Dupont & Fils SAS\",\n      suffix: \"Achats\",\n    },\n  }),\n});\n","lang":"typescript"},"children":[]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"siret-mandate","__idx":6},"children":["SIRET mandate"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Targets a specific establishment (site) within a company. Use when the counterpart routes invoices by establishment."]},{"$$mdtype":"Tag","name":"CodeGroup","attributes":{"mode":"tabs"},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","data-title":"cURL","header":{"title":"cURL","controls":{"copy":{}}},"source":"curl -X POST https://pdp.seqino.dev/api/mandates \\\n  -H \"Authorization: <your-token>\" \\\n  -H \"X-PDP-Client-Id: <client-id>\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"start_date\": \"2026-01-01T00:00:00Z\",\n    \"directory_entry\": {\n      \"siren\": \"123456789\",\n      \"name\": \"Dupont & Fils SAS — Siège social\",\n      \"siret\": \"12345678900012\"\n    }\n  }'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","data-title":"Python","header":{"title":"Python","controls":{"copy":{}}},"source":"response = client.post(\"/mandates\",\n    headers={\"X-PDP-Client-Id\": client_id},\n    json={\n        \"start_date\": \"2026-01-01T00:00:00Z\",\n        \"directory_entry\": {\n            \"siren\": \"123456789\",\n            \"name\": \"Dupont & Fils SAS — Siège social\",\n            \"siret\": \"12345678900012\",\n        },\n    },\n)\nresponse.raise_for_status()\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"typescript","data-title":"TypeScript","header":{"title":"TypeScript","controls":{"copy":{}}},"source":"await fetch(\"https://pdp.seqino.dev/api/mandates\", {\n  method: \"POST\",\n  headers: {\n    \"Authorization\": \"<your-token>\",\n    \"X-PDP-Client-Id\": clientId,\n    \"Content-Type\": \"application/json\",\n  },\n  body: JSON.stringify({\n    start_date: \"2026-01-01T00:00:00Z\",\n    directory_entry: {\n      siren: \"123456789\",\n      name: \"Dupont & Fils SAS — Siège social\",\n      siret: \"12345678900012\",\n    },\n  }),\n});\n","lang":"typescript"},"children":[]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"siret--routing-code-mandate","__idx":7},"children":["SIRET + routing code mandate"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Targets a specific establishment with an additional routing identifier (e.g. GLN, ODETTE). Use this when the counterpart's PDP requires structured routing beyond SIRET."]},{"$$mdtype":"Tag","name":"CodeGroup","attributes":{"mode":"tabs"},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","data-title":"cURL","header":{"title":"cURL","controls":{"copy":{}}},"source":"curl -X POST https://pdp.seqino.dev/api/mandates \\\n  -H \"Authorization: <your-token>\" \\\n  -H \"X-PDP-Client-Id: <client-id>\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"start_date\": \"2026-01-01T00:00:00Z\",\n    \"directory_entry\": {\n      \"siren\": \"123456789\",\n      \"name\": \"Dupont & Fils SAS — Siège social\",\n      \"siret\": \"12345678900012\",\n      \"routing_identifier\": \"3012345678906\",\n      \"routing_identifier_type\": \"0088\",\n      \"routing_code_label\": \"Libelle Code routage\",\n      \"administrative_status\": \"A\",\n      \"establishment_nature\": \"Private\"\n    }\n  }'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","data-title":"Python","header":{"title":"Python","controls":{"copy":{}}},"source":"response = client.post(\"/mandates\",\n    headers={\"X-PDP-Client-Id\": client_id},\n    json={\n        \"start_date\": \"2026-01-01T00:00:00Z\",\n        \"directory_entry\": {\n            \"siren\": \"123456789\",\n            \"name\": \"Dupont & Fils SAS — Siège social\",\n            \"siret\": \"12345678900012\",\n            \"routing_identifier\": \"3012345678906\",\n            \"routing_identifier_type\": \"0088\",\n            \"routing_code_label\": \"Libelle Code routage\",\n            \"administrative_status\": \"A\",\n            \"establishment_nature\": \"Private\",\n        },\n    },\n)\nresponse.raise_for_status()\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"typescript","data-title":"TypeScript","header":{"title":"TypeScript","controls":{"copy":{}}},"source":"await fetch(\"https://pdp.seqino.dev/api/mandates\", {\n  method: \"POST\",\n  headers: {\n    \"Authorization\": \"<your-token>\",\n    \"X-PDP-Client-Id\": clientId,\n    \"Content-Type\": \"application/json\",\n  },\n  body: JSON.stringify({\n    start_date: \"2026-01-01T00:00:00Z\",\n    directory_entry: {\n      siren: \"123456789\",\n      name: \"Dupont & Fils SAS — Siège social\",\n      siret: \"12345678900012\",\n      routing_identifier: \"3012345678906\",\n      routing_identifier_type: \"0088\",\n      routing_code_label: \"Libelle Code routage\",\n      administrative_status: \"A\",\n      establishment_nature: \"Private\",\n    },\n  }),\n});\n","lang":"typescript"},"children":[]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The supported ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["routing_identifier_type"]}," values are:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Value"},"children":["Value"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Standard"},"children":["Standard"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["0088"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["GS1"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["GLN (Global Location Number)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["0060"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["DUNS"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Dun & Bradstreet number"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["0224"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["SIREN/SIRET"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["French national identifier"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Internal"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["—"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Internal routing code defined by the counterpart's PDP"]}]}]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"next-steps","__idx":8},"children":["Next steps"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Once your mandates are active, you can start submitting invoices. See the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/openapi"},"children":["API reference"]}," for the full invoicing endpoints."]}]},"headings":[{"value":"Creating clients and mandates","id":"creating-clients-and-mandates","depth":1},{"value":"Prerequisites","id":"prerequisites","depth":2},{"value":"Step 1: Create a client","id":"step-1-create-a-client","depth":2},{"value":"Step 2: Create mandates","id":"step-2-create-mandates","depth":2},{"value":"SIREN mandate","id":"siren-mandate","depth":3},{"value":"SIREN + suffix mandate","id":"siren--suffix-mandate","depth":3},{"value":"SIRET mandate","id":"siret-mandate","depth":3},{"value":"SIRET + routing code mandate","id":"siret--routing-code-mandate","depth":3},{"value":"Next steps","id":"next-steps","depth":2}],"frontmatter":{"seo":{"title":"Creating clients and mandates"}},"lastModified":"2026-08-07T09:23:01.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/guides/clients-and-mandates","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}