spvs
Créer ou mettre à jour une SPV externe
Upsert synchrone par identifiant partenaire. Une ressource MARKO supprimée logiquement est restaurée avec le même UUID. existing_marko_id permet de lier explicitement une SPV existante lors du premier envoi.
Créer ou mettre à jour une SPV externe
curl --request PUT \
--url https://partner-api.marko.fr/v1/spvs/external/{external_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"name": "SPV Paris 19",
"forme_juridique": "SAS",
"siren": "123456782",
"adresse": "10 rue de la République, 75019 Paris"
}
'import requests
url = "https://partner-api.marko.fr/v1/spvs/external/{external_id}"
payload = {
"name": "SPV Paris 19",
"forme_juridique": "SAS",
"siren": "123456782",
"adresse": "10 rue de la République, 75019 Paris"
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'SPV Paris 19',
forme_juridique: 'SAS',
siren: '123456782',
adresse: '10 rue de la République, 75019 Paris'
})
};
fetch('https://partner-api.marko.fr/v1/spvs/external/{external_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://partner-api.marko.fr/v1/spvs/external/{external_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'SPV Paris 19',
'forme_juridique' => 'SAS',
'siren' => '123456782',
'adresse' => '10 rue de la République, 75019 Paris'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://partner-api.marko.fr/v1/spvs/external/{external_id}"
payload := strings.NewReader("{\n \"name\": \"SPV Paris 19\",\n \"forme_juridique\": \"SAS\",\n \"siren\": \"123456782\",\n \"adresse\": \"10 rue de la République, 75019 Paris\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://partner-api.marko.fr/v1/spvs/external/{external_id}")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"SPV Paris 19\",\n \"forme_juridique\": \"SAS\",\n \"siren\": \"123456782\",\n \"adresse\": \"10 rue de la République, 75019 Paris\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://partner-api.marko.fr/v1/spvs/external/{external_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"SPV Paris 19\",\n \"forme_juridique\": \"SAS\",\n \"siren\": \"123456782\",\n \"adresse\": \"10 rue de la République, 75019 Paris\"\n}"
response = http.request(request)
puts response.read_body{
"external_id": "<string>",
"marko_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"outcome": "created",
"resource": {
"name": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"entity_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"siren": "<string>",
"forme_juridique": "<string>",
"capital_social": 123,
"montage": "dette_senior",
"date_creation": "2023-12-25",
"identite_entreprise": {
"siren": "<string>",
"siret": "<string>",
"representant_legal": {
"nom": "<string>",
"prenom": "<string>",
"qualite": "<string>",
"date_naissance": "<string>",
"denomination": "<string>",
"siren": "<string>",
"personne_morale": true,
"qualites": [
"<string>"
],
"date_prise_de_poste": "<string>",
"adresse": {
"adresse_ligne_1": "<string>",
"adresse_ligne_2": "<string>",
"adresse_ligne_3": "<string>",
"complement_adresse": "<string>",
"code_postal": "<string>",
"ville": "<string>",
"pays": "<string>",
"code_pays": "<string>",
"latitude": 123,
"longitude": 123
},
"forme_juridique": "<string>"
},
"presidents": [
{
"nom": "<string>",
"prenom": "<string>",
"qualite": "<string>",
"date_naissance": "<string>",
"denomination": "<string>",
"siren": "<string>",
"personne_morale": true,
"qualites": [
"<string>"
],
"date_prise_de_poste": "<string>",
"adresse": {
"adresse_ligne_1": "<string>",
"adresse_ligne_2": "<string>",
"adresse_ligne_3": "<string>",
"complement_adresse": "<string>",
"code_postal": "<string>",
"ville": "<string>",
"pays": "<string>",
"code_pays": "<string>",
"latitude": 123,
"longitude": 123
},
"forme_juridique": "<string>"
}
],
"beneficiaires_effectifs": [
{
"nom": "<string>",
"prenom": "<string>"
}
],
"adresse_siege": {
"adresse_ligne_1": "<string>",
"adresse_ligne_2": "<string>",
"adresse_ligne_3": "<string>",
"complement_adresse": "<string>",
"code_postal": "<string>",
"ville": "<string>",
"pays": "<string>",
"code_pays": "<string>",
"latitude": 123,
"longitude": 123
},
"is_radiee": true,
"entreprise_cessee": true,
"date_radiation": "<string>",
"date_cessation": "<string>",
"numero_tva_intracommunautaire": "<string>",
"date_cloture_exercice": "<string>",
"date_prochaine_cloture_exercice": "<string>",
"date_cloture_exercice_exceptionnelle": "<string>"
},
"dirigeants": [
{
"nom": "<string>",
"prenom": "<string>",
"qualite": "<string>",
"date_naissance": "<string>",
"denomination": "<string>",
"siren": "<string>",
"personne_morale": true,
"qualites": [
"<string>"
],
"date_prise_de_poste": "<string>",
"adresse": {
"adresse_ligne_1": "<string>",
"adresse_ligne_2": "<string>",
"adresse_ligne_3": "<string>",
"complement_adresse": "<string>",
"code_postal": "<string>",
"ville": "<string>",
"pays": "<string>",
"code_pays": "<string>",
"latitude": 123,
"longitude": 123
},
"forme_juridique": "<string>"
}
],
"procedures_collectives": [
{
"type": "<string>",
"date": "<string>",
"tribunal": "<string>"
}
],
"organisation_pappers": {},
"justice_pappers": {},
"fond_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"adresse": "<string>",
"region": "<string>",
"beneficiaire_effectif": "<string>",
"date_ag_annuelle": "2023-12-25",
"resultat_net_ag": 123,
"pv_ag_document_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"procedure_collective": "aucune",
"litiges_en_cours": false,
"litiges_detail": "<string>",
"contentieux_items": [],
"operations_count": 0
},
"request_id": "<string>",
"taxonomy_additions": [
{
"code": "<string>",
"dimension": "operation_status",
"display_label": "<string>",
"source_kind": "marko",
"source_display_name": "<string>",
"is_visible": true,
"is_active": true,
"position": 123,
"label_editable": true,
"parent_code": "due_diligence",
"usage_count": 0,
"canonical_code": "<string>",
"icon_key": "tag"
}
]
}{
"external_id": "CF-SPV-001",
"marko_id": "33333333-3333-3333-3333-333333333333",
"outcome": "created",
"resource": {
"id": "33333333-3333-3333-3333-333333333333",
"entity_id": "11111111-1111-1111-1111-111111111111",
"name": "SPV Paris 19",
"created_at": "2026-08-22T08:00:00Z",
"updated_at": "2026-08-22T08:00:00Z"
},
"taxonomy_additions": [],
"request_id": "req_cf_spv_upsert"
}{
"type": "about:blank",
"title": "Bad Request",
"status": 400,
"detail": "Idempotency-Key must contain at most 255 visible ASCII characters without spaces.",
"request_id": "req_example_partner_call"
}{
"type": "about:blank",
"title": "Unauthorized",
"status": 401,
"detail": "A valid bearer token is required.",
"request_id": "req_example_partner_call"
}{
"type": "about:blank",
"title": "Forbidden",
"status": 403,
"detail": "The API key does not allow this operation.",
"request_id": "req_example_partner_call"
}{
"type": "about:blank",
"title": "Conflict",
"status": 409,
"detail": "The idempotency key payload, external reference, target, or source conflicts with an existing write.",
"request_id": "req_example_partner_call"
}{
"type": "about:blank",
"title": "Unprocessable Content",
"status": 422,
"detail": "The request payload or parameters are invalid.",
"request_id": "req_example_partner_call"
}{
"type": "about:blank",
"title": "Precondition Required",
"status": 428,
"detail": "The Idempotency-Key header is required.",
"request_id": "req_example_partner_call"
}{
"type": "about:blank",
"title": "Too Many Requests",
"status": 429,
"detail": "The request rate limit was exceeded.",
"request_id": "req_example_partner_call"
}{
"type": "about:blank",
"title": "Internal Server Error",
"status": 500,
"detail": "An unexpected server error occurred.",
"request_id": "req_example_partner_call"
}Authorizations
Use the access_token returned by POST /v1/auth/token. Do not send the raw API secret on business endpoints.
Headers
Partner-generated correlation identifier echoed in logs and error payloads.
Required for every write, including environments where replay deduplication is disabled. Reuse the same value when retrying the same logical write and use a new value for a different write.
Maximum string length:
255Pattern:
^[!-~]+$Path Parameters
Required string length:
1 - 255Pattern:
^[A-Za-z0-9_~-][A-Za-z0-9._:~-]{0,254}$Body
application/json
Required string length:
1 - 255Maximum string length:
255Type de montage financier du SPV.
Available options:
dette_senior, mezzanine, equity, mix Maximum string length:
500Maximum string length:
255Maximum string length:
500Response
Additional successful response
Available options:
created, updated, noop, restored, bound Show child attributes
Show child attributes
Show child attributes
Show child attributes
⌘I
Créer ou mettre à jour une SPV externe
curl --request PUT \
--url https://partner-api.marko.fr/v1/spvs/external/{external_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"name": "SPV Paris 19",
"forme_juridique": "SAS",
"siren": "123456782",
"adresse": "10 rue de la République, 75019 Paris"
}
'import requests
url = "https://partner-api.marko.fr/v1/spvs/external/{external_id}"
payload = {
"name": "SPV Paris 19",
"forme_juridique": "SAS",
"siren": "123456782",
"adresse": "10 rue de la République, 75019 Paris"
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'SPV Paris 19',
forme_juridique: 'SAS',
siren: '123456782',
adresse: '10 rue de la République, 75019 Paris'
})
};
fetch('https://partner-api.marko.fr/v1/spvs/external/{external_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://partner-api.marko.fr/v1/spvs/external/{external_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'SPV Paris 19',
'forme_juridique' => 'SAS',
'siren' => '123456782',
'adresse' => '10 rue de la République, 75019 Paris'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://partner-api.marko.fr/v1/spvs/external/{external_id}"
payload := strings.NewReader("{\n \"name\": \"SPV Paris 19\",\n \"forme_juridique\": \"SAS\",\n \"siren\": \"123456782\",\n \"adresse\": \"10 rue de la République, 75019 Paris\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://partner-api.marko.fr/v1/spvs/external/{external_id}")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"SPV Paris 19\",\n \"forme_juridique\": \"SAS\",\n \"siren\": \"123456782\",\n \"adresse\": \"10 rue de la République, 75019 Paris\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://partner-api.marko.fr/v1/spvs/external/{external_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"SPV Paris 19\",\n \"forme_juridique\": \"SAS\",\n \"siren\": \"123456782\",\n \"adresse\": \"10 rue de la République, 75019 Paris\"\n}"
response = http.request(request)
puts response.read_body{
"external_id": "<string>",
"marko_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"outcome": "created",
"resource": {
"name": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"entity_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"siren": "<string>",
"forme_juridique": "<string>",
"capital_social": 123,
"montage": "dette_senior",
"date_creation": "2023-12-25",
"identite_entreprise": {
"siren": "<string>",
"siret": "<string>",
"representant_legal": {
"nom": "<string>",
"prenom": "<string>",
"qualite": "<string>",
"date_naissance": "<string>",
"denomination": "<string>",
"siren": "<string>",
"personne_morale": true,
"qualites": [
"<string>"
],
"date_prise_de_poste": "<string>",
"adresse": {
"adresse_ligne_1": "<string>",
"adresse_ligne_2": "<string>",
"adresse_ligne_3": "<string>",
"complement_adresse": "<string>",
"code_postal": "<string>",
"ville": "<string>",
"pays": "<string>",
"code_pays": "<string>",
"latitude": 123,
"longitude": 123
},
"forme_juridique": "<string>"
},
"presidents": [
{
"nom": "<string>",
"prenom": "<string>",
"qualite": "<string>",
"date_naissance": "<string>",
"denomination": "<string>",
"siren": "<string>",
"personne_morale": true,
"qualites": [
"<string>"
],
"date_prise_de_poste": "<string>",
"adresse": {
"adresse_ligne_1": "<string>",
"adresse_ligne_2": "<string>",
"adresse_ligne_3": "<string>",
"complement_adresse": "<string>",
"code_postal": "<string>",
"ville": "<string>",
"pays": "<string>",
"code_pays": "<string>",
"latitude": 123,
"longitude": 123
},
"forme_juridique": "<string>"
}
],
"beneficiaires_effectifs": [
{
"nom": "<string>",
"prenom": "<string>"
}
],
"adresse_siege": {
"adresse_ligne_1": "<string>",
"adresse_ligne_2": "<string>",
"adresse_ligne_3": "<string>",
"complement_adresse": "<string>",
"code_postal": "<string>",
"ville": "<string>",
"pays": "<string>",
"code_pays": "<string>",
"latitude": 123,
"longitude": 123
},
"is_radiee": true,
"entreprise_cessee": true,
"date_radiation": "<string>",
"date_cessation": "<string>",
"numero_tva_intracommunautaire": "<string>",
"date_cloture_exercice": "<string>",
"date_prochaine_cloture_exercice": "<string>",
"date_cloture_exercice_exceptionnelle": "<string>"
},
"dirigeants": [
{
"nom": "<string>",
"prenom": "<string>",
"qualite": "<string>",
"date_naissance": "<string>",
"denomination": "<string>",
"siren": "<string>",
"personne_morale": true,
"qualites": [
"<string>"
],
"date_prise_de_poste": "<string>",
"adresse": {
"adresse_ligne_1": "<string>",
"adresse_ligne_2": "<string>",
"adresse_ligne_3": "<string>",
"complement_adresse": "<string>",
"code_postal": "<string>",
"ville": "<string>",
"pays": "<string>",
"code_pays": "<string>",
"latitude": 123,
"longitude": 123
},
"forme_juridique": "<string>"
}
],
"procedures_collectives": [
{
"type": "<string>",
"date": "<string>",
"tribunal": "<string>"
}
],
"organisation_pappers": {},
"justice_pappers": {},
"fond_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"adresse": "<string>",
"region": "<string>",
"beneficiaire_effectif": "<string>",
"date_ag_annuelle": "2023-12-25",
"resultat_net_ag": 123,
"pv_ag_document_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"procedure_collective": "aucune",
"litiges_en_cours": false,
"litiges_detail": "<string>",
"contentieux_items": [],
"operations_count": 0
},
"request_id": "<string>",
"taxonomy_additions": [
{
"code": "<string>",
"dimension": "operation_status",
"display_label": "<string>",
"source_kind": "marko",
"source_display_name": "<string>",
"is_visible": true,
"is_active": true,
"position": 123,
"label_editable": true,
"parent_code": "due_diligence",
"usage_count": 0,
"canonical_code": "<string>",
"icon_key": "tag"
}
]
}{
"external_id": "CF-SPV-001",
"marko_id": "33333333-3333-3333-3333-333333333333",
"outcome": "created",
"resource": {
"id": "33333333-3333-3333-3333-333333333333",
"entity_id": "11111111-1111-1111-1111-111111111111",
"name": "SPV Paris 19",
"created_at": "2026-08-22T08:00:00Z",
"updated_at": "2026-08-22T08:00:00Z"
},
"taxonomy_additions": [],
"request_id": "req_cf_spv_upsert"
}{
"type": "about:blank",
"title": "Bad Request",
"status": 400,
"detail": "Idempotency-Key must contain at most 255 visible ASCII characters without spaces.",
"request_id": "req_example_partner_call"
}{
"type": "about:blank",
"title": "Unauthorized",
"status": 401,
"detail": "A valid bearer token is required.",
"request_id": "req_example_partner_call"
}{
"type": "about:blank",
"title": "Forbidden",
"status": 403,
"detail": "The API key does not allow this operation.",
"request_id": "req_example_partner_call"
}{
"type": "about:blank",
"title": "Conflict",
"status": 409,
"detail": "The idempotency key payload, external reference, target, or source conflicts with an existing write.",
"request_id": "req_example_partner_call"
}{
"type": "about:blank",
"title": "Unprocessable Content",
"status": 422,
"detail": "The request payload or parameters are invalid.",
"request_id": "req_example_partner_call"
}{
"type": "about:blank",
"title": "Precondition Required",
"status": 428,
"detail": "The Idempotency-Key header is required.",
"request_id": "req_example_partner_call"
}{
"type": "about:blank",
"title": "Too Many Requests",
"status": 429,
"detail": "The request rate limit was exceeded.",
"request_id": "req_example_partner_call"
}{
"type": "about:blank",
"title": "Internal Server Error",
"status": 500,
"detail": "An unexpected server error occurred.",
"request_id": "req_example_partner_call"
}