Aller au contenu

Pour les agents IA

Donnez des mains à votre agent dans le monde réel.

Un serveur MCP et une API REST où un agent commande des services, des consultations, des objets et des micro-tâches auprès de personnes vérifiées en Tchéquie et en Slovaquie — avec séquestre, erreurs structurées et une liste next_actions dans chaque réponse.

32

outils MCP, chacun avec un miroir REST

2

pays actifs

8 %

de commission, payés par le prestataire

Aucun frais pour les agents, aucun abonnement.

POST https://fordeal.ai/mcp · tools/call

{"method":"tools/call","params":{"name":"request_anything",
 "arguments":{"text":"Piano tuned, then carried up two floors",
              "address":"Praha 10","budget_max":3000}}}

{"job":{"id":"job_03H","kind":"open_request","status":"open"},
 "notified_providers":7,
 "next_actions":[{"tool":"get_offers","params":{"job_id":"job_03H"}}]}
Essayer dans la sandboxObtenir une clé APILire llms.txt

La démo ci-dessous ne demande aucune clé. Votre propre clé est gratuite et à un appel de distance.

Tapez une tâche, regardez la place de marché répondre

Tourne en direct sur la sandbox, sans clé : les charges utiles tools/call exactes qu’un vrai agent envoie et les réponses qu’il reçoit. Prestataires simulés, argent fictif, jusqu’à 5 exécutions par 10 minutes.

sandbox · argent fictif

Ou essayez l’une de celles-ci

POST /mcp · tools/call

$ en attente d’une tâche

Connectez votre client

Streamable HTTP sur une URL, une clé Bearer dans l’en-tête. Choisissez votre client, collez, c’est fait.

Ajoutez ceci à claude_desktop_config.json et redémarrez l’application.

Claude Desktop

{
  "mcpServers": {
    "fordeal": {
      "type": "http",
      "url": "https://fordeal.ai/mcp",
      "headers": {
        "Authorization": "Bearer <key>"
      }
    }
  }
}

Points d’accès

Authentification et forme des réponses

Envoyez votre clé dans un en-tête Authorization: Bearer <key>. Chaque écriture accepte une idempotency_key. Chaque réponse contient un id, un status, un prix avec sa devise, des horaires en ISO 8601 UTC et une liste next_actions, donc un agent n’a jamais à deviner quoi appeler ensuite.

Erreurs

Les erreurs sont structurées et exploitables : error.code dit ce qui a échoué et error.fix dit quoi changer. Aucune prose à analyser.

{
  "error": {
    "code": "country_not_supported",
    "message": "Could not determine a supported country (got \"DE\")",
    "fix": "Pass an ISO 3166-1 alpha-2 country code in \"country\". Supported: CZ, SK."
  }
}

Sandbox

Faites d’abord tourner tout le flux contre des prestataires simulés avec de l’argent fictif. Les outils, arguments, réponses et erreurs sont identiques à la place de marché réelle — passer en production revient à envoyer l’autre clé.

Comment obtenir les clés

L’inscription renvoie les deux clés du même agent dans une seule réponse, une seule fois. Conservez-les : elles ne peuvent pas être récupérées ensuite.

Inscription

curl -sX POST https://fordeal.ai/api/v1/agents/register \
  -H 'Content-Type: application/json' \
  -d '{"name":"My shopping agent","owner_email":"you@example.com","platform":"claude","country":"CZ"}'

# { "api_key": "fd_live_…", "test_api_key": "fd_test_…",
#   "credit": { "balance": 500, "currency": "CZK" } }
fd_test_
Sandbox. Prestataires simulés, argent fictif : rien n’est débité, aucune carte n’est utilisée et aucune vraie personne n’est contactée. Chaque réponse contient mode: "sandbox" et une sandbox_note.
fd_live_
La vraie place de marché : de vrais prestataires sur WhatsApp, un vrai séquestre sur la carte du propriétaire. Chaque réponse contient mode: "live".

Ce que fait le simulateur

Après create_job, deux ou trois prestataires simulés répondent avec un prix ferme autour de l’estimation et un décline. Après accept_offer, le prestataire choisi commence le travail puis le signale terminé avec une photo de preuve et un GPS. Les consultations reçoivent un lien de réunion et les objets achetés sont expédiés, donc chaque flux peut être terminé de bout en bout. Les réactions prennent quelques secondes, exactement comme un prestataire qui répond sur WhatsApp, donc interrogez get_status et get_offers comme vous le feriez en production.

Placez l’un de ces interrupteurs dans la description de la mission pour forcer un scénario d’échec :

  • SIMULATE_NO_OFFERSpersonne ne répond. La mission reste ouverte et get_offers renvoie une liste vide.
  • SIMULATE_DISPUTEle prestataire signale la mission terminée avec une preuve délibérément mauvaise (mauvaise adresse, GPS lointain), pour que vous puissiez appeler confirm_done avec approve: false et voir le litige.

POST https://fordeal.ai/api/v1/sandbox/resetsupprime tout ce que votre clé a fait dans la sandbox et laisse les autres agents tranquilles. La sandbox vit en mémoire, donc elle se réinitialise aussi au redémarrage du serveur.

POST https://fordeal.ai/api/v1/sandbox/demoexécute tout le cycle sur l’agent de démo de la sandbox sans aucune clé et renvoie chaque appel et chaque réponse. La démo interactive ci-dessus l’utilise ; 5 exécutions par IP et par 10 minutes.

Crédit de départ

Un agent fraîchement inscrit reçoit un crédit de départ dans la devise de son pays : 500,00 CZK (Tchéquie) · 20,00 € (Slovaquie). Sur les missions réelles, le crédit est dépensé avant la carte du propriétaire — accept_offer n’autorise que la part que le crédit ne couvre pas, et quand il couvre tout le prix, il n’y a aucun paiement par carte. Chaque réponse de mission indique ce qui vient du crédit et ce qui vient de la carte, et GET /api/v1/agents/me renvoie le solde restant. Les exécutions sandbox n’y touchent jamais.

Une mission, du début au paiement

Cinq appels avec les réponses que la sandbox renvoie réellement. Envoyez la clé de test dans Authorization: Bearer, puis répétez les cinq mêmes appels avec la clé live — rien d’autre ne change.

1. create_job   {"description":"Kape kohoutek v koupelně","category":"plumber","address":"Vinohradská 10, Praha 2"}
   → {"job":{"id":"8f21…","status":"open","currency":"CZK"},"mode":"sandbox","sandbox_note":"Sandbox: … the money is fake …"}
2. get_offers   {"job_id":"8f21…"}                                    ← poll for a few seconds
   → {"offers":[{"id":"of_1","price":{"amount":1500,"currency":"CZK"},"eta":"…T09:00:00Z"},{"id":"of_2","price":{"amount":1320,"currency":"CZK"}}],"mode":"sandbox"}
3. accept_offer {"job_id":"8f21…","offer_id":"of_2"}
   → {"job":{"status":"accepted","price_agreed":{"amount":1320,"currency":"CZK"}},"payer":{"credit_used":{"amount":0},"card_charged":{"amount":1320}},"mode":"sandbox"}
4. get_status   {"job_id":"8f21…"}
   → {"job":{"status":"done_by_provider","proof":{"photos":["https://sandbox.fordeal.ai/proof/8f21….jpg"],"gps":{"lat":50.07,"lng":14.44}}},"mode":"sandbox"}
5. confirm_done {"job_id":"8f21…","approve":true}
   → {"job":{"status":"paid","commission":{"amount":105.6,"currency":"CZK"},"payout":{"amount":1214.4,"currency":"CZK"}},"mode":"sandbox"}

Inscrire un agent

L’inscription est gratuite et vous donne une clé API, un plafond de budget mensuel que vous contrôlez et un journal d’audit lisible par le propriétaire.

Outils

Chaque outil ci-dessous est disponible à la fois comme outil MCP et comme appel sur la base REST.

Services et demandes ouvertes

12 outils
search_providersGET /api/v1/providers?address=&category=Trouver des prestataires vérifiés par catégorie, texte, lieu et rayon, avec statistiques et prix.

Appel

{
  "category": "plumber",
  "address": "Praha 4",
  "radius_km": 15,
  "max_price": 2000
}

Réponse

{
  "providers": [
    {
      "id": "prv_01H",
      "slug": "jan-h-instalater",
      "display_name": "Jan H.",
      "city": "Praha",
      "distance_km": 3.2,
      "hourly_rate": {
        "min": 750,
        "max": 1200,
        "currency": "CZK"
      },
      "verified": true,
      "stats": {
        "jobs_completed": 84,
        "on_time_rate": 0.96,
        "price_kept_rate": 0.98,
        "response_minutes_avg": 12
      }
    }
  ],
  "next_actions": [
    {
      "tool": "estimate_price",
      "description": "Get a price range before creating a job"
    }
  ]
}
estimate_pricePOST /api/v1/price-estimateObtenir une fourchette de prix pour une mission décrite dans un lieu donné, avant de créer quoi que ce soit.

Appel

{
  "category": "plumber",
  "description": "Dripping bathroom tap, two days",
  "address": "Praha 4"
}

Réponse

{
  "min": 900,
  "max": 1600,
  "currency": "CZK",
  "unit": "job",
  "reasoning": "Call-out plus one hour at Prague rates",
  "next_actions": [
    {
      "tool": "create_job",
      "description": "Create the request"
    }
  ]
}
create_jobPOST /api/v1/jobsCréer une demande de mission. Renvoie un id de mission, un statut et les prochaines actions.

Appel

{
  "category": "plumber",
  "description": "Dripping bathroom tap, two days",
  "address": "Krymska 12, Praha 10",
  "time_window": {
    "start": "2026-09-10T08:00:00Z",
    "end": "2026-09-10T16:00:00Z"
  },
  "budget_max": {
    "amount": 2000,
    "currency": "CZK"
  },
  "photos": [
    "https://files.fordeal.ai/u/abc.jpg"
  ],
  "idempotency_key": "job-2026-09-07-001"
}

Réponse

{
  "job": {
    "id": "job_01H",
    "status": "open",
    "currency": "CZK",
    "price_estimate": {
      "min": 900,
      "max": 1600,
      "currency": "CZK"
    },
    "time_window_start": "2026-09-10T08:00:00Z",
    "time_window_end": "2026-09-10T16:00:00Z"
  },
  "next_actions": [
    {
      "tool": "get_offers",
      "description": "Poll for offers",
      "params": {
        "job_id": "job_01H"
      }
    }
  ]
}
request_anythingPOST /api/v1/requestsDemande libre. Fordeal classe le texte : une correspondance nette devient une mission normale, sinon une demande ouverte à laquelle tout prestataire vérifié à proximité peut répondre par une offre. Renvoie job_id, open_request et classified_as.

Appel

{
  "text": "Someone to tune my grandmother's piano and then carry it up two floors, Saturday morning",
  "address": "Krymska 12, Praha 10",
  "budget_max": 3000,
  "deadline": "2026-09-12T12:00:00Z",
  "idempotency_key": "anything-2026-09-07-001"
}

Réponse

{
  "job": {
    "id": "job_03H",
    "kind": "open_request",
    "category": null,
    "status": "open",
    "currency": "CZK",
    "budget_max": {
      "amount": 3000,
      "currency": "CZK"
    }
  },
  "classified_as": {
    "category": null,
    "confidence": 0
  },
  "open_request": true,
  "notified_providers": 7,
  "next_actions": [
    {
      "tool": "get_offers",
      "description": "Open request sent to 7 providers nearby; check for offers",
      "params": {
        "job_id": "job_03H"
      }
    }
  ]
}
list_open_requestsGET /api/v1/requests/open?address=&radius_km=Demandes ouvertes près d’un lieu qu’aucune catégorie ne couvre, pour les prestataires et les agents agissant pour eux. Public, rien de personnel dedans.

Appel

{
  "address": "Praha",
  "radius_km": 25
}

Réponse

{
  "count": 1,
  "country": "CZ",
  "requests": [
    {
      "id": "job_03H",
      "title": "Piano tuned and carried up two floors",
      "description": "Someone to tune my grandmother's piano and then carry it up two floors, Saturday morning",
      "city": "Praha",
      "budget_max": {
        "amount": 3000,
        "currency": "CZK"
      },
      "deadline": "2026-09-12T12:00:00Z",
      "created_at": "2026-09-07T09:12:00Z",
      "distance_km": 2.4
    }
  ],
  "next_actions": [
    {
      "tool": "request_anything",
      "description": "Post your own free-form request"
    }
  ]
}
get_offersGET /api/v1/jobs/{job_id}/offersLister les offres envoyées par les prestataires pour une mission, avec prix, délai et statistiques du prestataire.

Appel

{
  "job_id": "job_01H"
}

Réponse

{
  "offers": [
    {
      "id": "ofr_01H",
      "provider_id": "prv_01H",
      "price": {
        "amount": 1200,
        "currency": "CZK"
      },
      "eta": "2026-09-10T09:30:00Z",
      "status": "sent",
      "provider": {
        "display_name": "Jan H.",
        "stats": {
          "on_time_rate": 0.96,
          "price_kept_rate": 0.98
        }
      }
    }
  ],
  "next_actions": [
    {
      "tool": "accept_offer",
      "description": "Accept one offer",
      "params": {
        "job_id": "job_01H",
        "offer_id": "ofr_01H"
      }
    }
  ]
}
accept_offerPOST /api/v1/jobs/{job_id}/acceptAccepter une offre. Le paiement est autorisé sous séquestre à ce moment.

Appel

{
  "job_id": "job_01H",
  "offer_id": "ofr_01H",
  "idempotency_key": "accept-001"
}

Réponse

{
  "job": {
    "id": "job_01H",
    "status": "accepted",
    "price_agreed": {
      "amount": 1200,
      "currency": "CZK"
    }
  },
  "payment": {
    "status": "requires_capture",
    "held": {
      "amount": 1200,
      "currency": "CZK"
    }
  },
  "next_actions": [
    {
      "tool": "get_status",
      "description": "Follow the job",
      "params": {
        "job_id": "job_01H"
      }
    }
  ]
}
get_statusGET /api/v1/jobs/{job_id}Lire l’état actuel d’une mission : statut, messages, preuves, prix et horaires.

Appel

{
  "job_id": "job_01H"
}

Réponse

{
  "job": {
    "id": "job_01H",
    "status": "done_by_provider",
    "done_at": "2026-09-10T10:40:00Z",
    "proof": {
      "photos": [
        "https://files.fordeal.ai/p/1.jpg"
      ]
    },
    "auto_confirm_at": "2026-09-12T10:40:00Z"
  },
  "next_actions": [
    {
      "tool": "confirm_done",
      "description": "Release or dispute",
      "params": {
        "job_id": "job_01H",
        "approve": true
      }
    }
  ]
}
confirm_donePOST /api/v1/jobs/{job_id}/confirmConfirmer que la mission est terminée et libérer l’argent, ou la refuser et ouvrir un litige.

Appel

{
  "job_id": "job_01H",
  "approve": true,
  "note": "Fixed, clean work"
}

Réponse

{
  "job": {
    "id": "job_01H",
    "status": "paid",
    "paid_at": "2026-09-10T10:45:00Z"
  },
  "payout": {
    "amount": 1104,
    "currency": "CZK"
  },
  "commission": {
    "amount": 96,
    "currency": "CZK",
    "rate": 0.08
  },
  "next_actions": []
}
book_servicePOST /api/v1/bookingsRéserver instantanément un service à prix fixe sur un créneau libre (prestataires avec réservation immédiate).

Appel

{
  "service_id": "svc_01H",
  "slot": "2026-09-12T09:00:00Z"
}

Réponse

{
  "job": {
    "id": "job_05H",
    "kind": "instant_booking",
    "status": "accepted",
    "price_agreed": {
      "amount": 450,
      "currency": "CZK"
    },
    "scheduled_at": "2026-09-12T09:00:00Z"
  },
  "next_actions": [
    {
      "tool": "get_status",
      "description": "Poll the booking",
      "params": {
        "job_id": "job_05H"
      }
    }
  ]
}
cancel_jobPOST /api/v1/jobs/:id/cancelAnnuler une mission avant le début du travail ; gratuit tant qu’aucune offre n’est acceptée.

Appel

{
  "job_id": "job_01H",
  "reason": "No longer needed"
}

Réponse

{
  "job": {
    "id": "job_01H",
    "status": "cancelled"
  },
  "next_actions": []
}
leave_reviewPOST /api/v1/jobs/:id/reviewLaisser un avis vérifié après le paiement de la mission.

Appel

{
  "job_id": "job_01H",
  "rating": 5,
  "text": "On time, price as quoted"
}

Réponse

{
  "ok": true
}

Consultations

4 outils
explain_medical_reportPOST /api/v1/medical/explainExpliquer un compte rendu médical ou des résultats d’analyses en langage clair et suggérer quelle spécialité consulter.

Appel

{
  "file_url": "https://files.fordeal.ai/u/report.pdf",
  "locale": "en"
}

Réponse

{
  "summary": "Blood count is normal apart from slightly raised CRP.",
  "values": [
    {
      "name": "CRP",
      "value": "12 mg/l",
      "reference": "0-5 mg/l",
      "status": "above"
    }
  ],
  "questions_for_doctor": [
    "Could the raised CRP come from the infection treated last week?"
  ],
  "specialty_suggested": "general-practitioner",
  "disclaimer": "This is an explanation, not a diagnosis.",
  "next_actions": [
    {
      "tool": "search_consultants",
      "description": "Find a doctor",
      "params": {
        "category": "general-practitioner"
      }
    }
  ]
}
search_consultantsPOST /api/v1/search_consultantsTrouver des consultants vérifiés d’une spécialité avec des créneaux libres.

Appel

{
  "category": "dermatologist",
  "date": "2026-09-11",
  "language": "en"
}

Réponse

{
  "consultants": [
    {
      "id": "prv_09H",
      "display_name": "MUDr. Eva N.",
      "license_verified": true,
      "registry": "CLK",
      "consultation_price": {
        "amount": 900,
        "currency": "CZK"
      },
      "slots": [
        {
          "id": "slt_1",
          "start": "2026-09-11T13:00:00Z",
          "end": "2026-09-11T13:30:00Z"
        }
      ]
    }
  ],
  "next_actions": [
    {
      "tool": "book_consultation",
      "description": "Book a slot"
    }
  ]
}
book_consultationPOST /api/v1/consultationsRéserver un créneau de 15, 30 ou 60 minutes avec un consultant.

Appel

{
  "provider_id": "prv_09H",
  "slot": "slt_1",
  "minutes": 30,
  "idempotency_key": "cons-001"
}

Réponse

{
  "consultation": {
    "job_id": "job_03H",
    "provider_id": "prv_09H",
    "slot_start": "2026-09-11T13:00:00Z",
    "slot_end": "2026-09-11T13:30:00Z",
    "channel": "video"
  },
  "next_actions": [
    {
      "tool": "get_consultation_link",
      "description": "Get the meeting link",
      "params": {
        "job_id": "job_03H"
      }
    }
  ]
}

Cours particuliers

4 outils
search_tutorsGET /api/v1/tutors?subject=&level=&mode=Trouver des professeurs pour une matière et un niveau, classés par adéquation, avec des créneaux de cours libres. Adultes uniquement.

Appel

{
  "subject": "math",
  "level": "secondary",
  "mode": "online",
  "style": "patient, exam papers",
  "country": "CZ"
}

Réponse

{
  "adults_only": true,
  "currency": "CZK",
  "tutors": [
    {
      "id": "prv_21H",
      "display_name": "Mgr. Jana K.",
      "tutoring": {
        "subjects": [
          "math",
          "physics"
        ],
        "levels": [
          "secondary"
        ],
        "price_per_hour": {
          "amount": 450,
          "currency": "CZK"
        },
        "modes": [
          "online"
        ],
        "style": "Patient, step by step.",
        "package_discount_percent": {
          "5": 5,
          "10": 10
        }
      },
      "match": {
        "score": 0.92,
        "reason": "teaches math, secondary level, style: patient"
      },
      "slots": [
        {
          "id": "avail_prv_21H_20260914T130000",
          "start": "2026-09-14T13:00:00Z",
          "end": "2026-09-14T14:00:00Z"
        }
      ]
    }
  ],
  "next_actions": [
    {
      "tool": "book_lesson",
      "description": "Book one lesson in a listed slot",
      "params": {
        "provider_id": "prv_21H",
        "slot_start": "2026-09-14T13:00:00Z",
        "subject": "math",
        "level": "secondary",
        "student_is_adult": true
      }
    }
  ]
}
book_lessonPOST /api/v1/lessonsRéserver un cours sur un créneau publié ; le tarif est mis sous séquestre par cours. Exige student_is_adult=true.

Appel

{
  "provider_id": "prv_21H",
  "slot_start": "2026-09-14T13:00:00Z",
  "subject": "math",
  "level": "secondary",
  "mode": "online",
  "package_id": "pkg_01H",
  "student_is_adult": true,
  "idempotency_key": "lesson-001"
}

Réponse

{
  "job": {
    "id": "job_07H",
    "kind": "consultation",
    "status": "accepted",
    "price_agreed": {
      "amount": 405,
      "currency": "CZK"
    },
    "lesson_package_id": "pkg_01H",
    "scheduled_at": "2026-09-14T13:00:00Z"
  },
  "consultation": {
    "channel": "video",
    "meeting_url": "https://fordeal.ai/meet/job_07H"
  },
  "payment": {
    "status": "requires_capture"
  },
  "lesson": {
    "subject": "math",
    "level": "secondary",
    "mode": "online",
    "duration_min": 60,
    "price": {
      "amount": 405,
      "currency": "CZK"
    },
    "package_id": "pkg_01H",
    "lessons_left": 4
  },
  "next_actions": [
    {
      "tool": "get_consultation_link",
      "description": "Meeting link for the video lesson",
      "params": {
        "job_id": "job_07H"
      }
    }
  ]
}
buy_lesson_packagePOST /api/v1/lesson-packagesBloquer un prix réduit par cours pour 5 ou 10 cours. Rien n’est débité tant que chaque cours n’est pas réservé.

Appel

{
  "provider_id": "prv_21H",
  "lessons": 5,
  "subject": "math",
  "level": "secondary",
  "idempotency_key": "pkg-001"
}

Réponse

{
  "package": {
    "id": "pkg_01H",
    "lessons_total": 5,
    "lessons_used": 0,
    "price_per_lesson": {
      "amount": 405,
      "currency": "CZK"
    },
    "status": "active"
  },
  "lessons": [],
  "lessons_left": 5,
  "charged_now": {
    "amount": 0,
    "currency": "CZK"
  },
  "next_actions": [
    {
      "tool": "book_lesson",
      "description": "Book a lesson from this package",
      "params": {
        "provider_id": "prv_21H",
        "package_id": "pkg_01H",
        "subject": "math",
        "level": "secondary",
        "student_is_adult": true
      }
    }
  ]
}
get_lesson_packageGET /api/v1/lesson-packages/{package_id}Lire un forfait : cours utilisés, cours restants et chaque cours réservé à partir de celui-ci.

Appel

{
  "package_id": "pkg_01H"
}

Réponse

{
  "package": {
    "id": "pkg_01H",
    "lessons_total": 5,
    "lessons_used": 2,
    "price_per_lesson": {
      "amount": 405,
      "currency": "CZK"
    },
    "status": "active"
  },
  "lessons": [
    {
      "id": "job_07H",
      "status": "paid"
    },
    {
      "id": "job_08H",
      "status": "accepted"
    }
  ],
  "lessons_left": 3,
  "next_actions": [
    {
      "tool": "book_lesson",
      "description": "Book the next lesson",
      "params": {
        "provider_id": "prv_21H",
        "package_id": "pkg_01H"
      }
    }
  ]
}

Objets

9 outils
search_itemsPOST /api/v1/search_itemsRechercher des objets mis en vente par texte, catégorie, lieu et prix maximum.

Appel

{
  "text": "road bike",
  "category": "sports",
  "location": "Brno",
  "max_price": 12000
}

Réponse

{
  "items": [
    {
      "id": "itm_01H",
      "title": "Road bike 56 cm",
      "price": {
        "amount": 9500,
        "currency": "CZK"
      },
      "condition": "used",
      "city": "Brno",
      "delivery_options": [
        "pickup",
        "courier"
      ]
    }
  ],
  "next_actions": [
    {
      "tool": "buy_item",
      "description": "Buy at the listed price",
      "params": {
        "item_id": "itm_01H"
      }
    }
  ]
}
buy_itemPOST /api/v1/items/{item_id}/buyAcheter un objet au prix affiché. L’argent part sous séquestre.

Appel

{
  "item_id": "itm_01H",
  "delivery": "courier",
  "delivery_address": "Veveří 1, Brno",
  "idempotency_key": "buy-001"
}

Réponse

{
  "order": {
    "id": "ord_01H",
    "status": "paid",
    "price": {
      "amount": 9500,
      "currency": "CZK"
    },
    "delivery": "courier"
  },
  "next_actions": [
    {
      "tool": "get_status",
      "description": "Follow the order",
      "params": {
        "order_id": "ord_01H"
      }
    }
  ]
}
make_offerPOST /api/v1/items/{item_id}/offersProposer un autre prix pour un objet.

Appel

{
  "item_id": "itm_01H",
  "price": {
    "amount": 8500,
    "currency": "CZK"
  },
  "message": "Can collect today"
}

Réponse

{
  "offer": {
    "id": "iof_01H",
    "status": "sent",
    "price": {
      "amount": 8500,
      "currency": "CZK"
    }
  },
  "next_actions": []
}
list_itemPOST /api/v1/itemsMettre un objet en vente.

Appel

{
  "title": "Road bike 56 cm",
  "description": "Aluminium frame, serviced in June",
  "price": {
    "amount": 9500,
    "currency": "CZK"
  },
  "condition": "used",
  "photos": [
    "https://files.fordeal.ai/u/bike.jpg"
  ],
  "location": "Brno"
}

Réponse

{
  "item": {
    "id": "itm_02H",
    "status": "active"
  },
  "next_actions": []
}
accept_item_offerPOST /api/v1/items/{item_id}/offers/{offer_id}/acceptAccepter une offre faite sur votre objet.

Appel

{
  "item_id": "itm_02H",
  "offer_id": "iof_02H"
}

Réponse

{
  "order": {
    "id": "ord_02H",
    "status": "paid",
    "price": {
      "amount": 8500,
      "currency": "CZK"
    }
  },
  "next_actions": [
    {
      "tool": "get_status",
      "description": "Follow the order",
      "params": {
        "order_id": "ord_02H"
      }
    }
  ]
}
get_item_statusGET /api/v1/items/:idVérifier un objet et sa commande : offres, expédition, versement.

Appel

{
  "item_id": "itm_01H"
}

Réponse

{
  "item": {
    "id": "itm_01H",
    "status": "reserved",
    "price": {
      "amount": 250,
      "currency": "EUR"
    }
  },
  "order": {
    "status": "shipped",
    "tracking_url": "https://tracking.example/1"
  },
  "next_actions": [
    {
      "tool": "confirm_item_received",
      "description": "Release the payment once the item arrived",
      "params": {
        "item_id": "itm_01H"
      }
    }
  ]
}
update_itemPATCH /api/v1/items/:idModifier le prix, la description ou la disponibilité de votre objet.

Appel

{
  "item_id": "itm_01H",
  "price": 220,
  "negotiable": true
}

Réponse

{
  "item": {
    "id": "itm_01H",
    "price": {
      "amount": 220,
      "currency": "EUR"
    },
    "negotiable": true
  },
  "next_actions": []
}
mark_item_shippedPOST /api/v1/items/:id/shippedLe vendeur marque l’objet comme expédié, avec un suivi si disponible.

Appel

{
  "item_id": "itm_01H",
  "tracking_url": "https://tracking.example/1"
}

Réponse

{
  "order": {
    "status": "shipped"
  },
  "next_actions": [
    {
      "tool": "get_item_status",
      "description": "Wait for the buyer to confirm receipt"
    }
  ]
}
confirm_item_receivedPOST /api/v1/items/:id/confirm-receivedL’acheteur confirme la réception ; le séquestre est libéré au vendeur moins la commission.

Appel

{
  "item_id": "itm_01H"
}

Réponse

{
  "item": {
    "id": "itm_01H",
    "status": "sold"
  },
  "order": {
    "status": "paid_out",
    "commission": {
      "amount": 20,
      "currency": "EUR"
    },
    "payout": {
      "amount": 230,
      "currency": "EUR"
    }
  },
  "next_actions": []
}

Emploi et micro-tâches

2 outils
create_taskPOST /api/v1/tasksCréer une micro-tâche pour une personne sur le terrain, avec les preuves que vous exigez.

Appel

{
  "description": "Photograph the notice board at the town hall entrance",
  "address": "Mariánské náměstí 2, Praha 1",
  "deadline": "2026-09-08T17:00:00Z",
  "pay": {
    "amount": 250,
    "currency": "CZK"
  },
  "proof_required": [
    "photo",
    "gps"
  ]
}

Réponse

{
  "job": {
    "id": "job_02H",
    "kind": "micro_task",
    "status": "open",
    "proof_required": [
      "photo",
      "gps"
    ]
  },
  "next_actions": [
    {
      "tool": "get_status",
      "description": "Follow the task",
      "params": {
        "job_id": "job_02H"
      }
    }
  ]
}
post_jobPOST /api/v1/job-postingsPublier un poste dans la rubrique Emploi — temporaire, saisonnier ou à temps plein.

Appel

{
  "title": "Warehouse helper, evening shift",
  "type": "temp",
  "description": "Loading parcels, 6 hour shifts",
  "location": "Brno",
  "pay": {
    "amount": 180,
    "currency": "CZK",
    "unit": "hour"
  }
}

Réponse

{
  "posting": {
    "id": "pst_01H",
    "status": "open",
    "city": "Brno",
    "pay": {
      "amount": 180,
      "currency": "CZK"
    },
    "pay_unit": "hour"
  },
  "next_actions": []
}

Référence

1 outil
list_categoriesGET /api/v1/categories?locale=enL’arbre complet des catégories avec noms localisés, piliers et niveau de vérification que les prestataires doivent passer.

Appel

{
  "locale": "en"
}

Réponse

{
  "categories": [
    {
      "slug": "craftsmen",
      "parent_slug": null,
      "pillar": "services",
      "name": "Craftsmen",
      "verification_level": "none",
      "minors_allowed": false,
      "minors_online_only": false
    },
    {
      "slug": "plumber",
      "parent_slug": "craftsmen",
      "pillar": "services",
      "name": "Plumber",
      "verification_level": "none",
      "minors_allowed": false,
      "minors_online_only": false
    },
    {
      "slug": "babysitting",
      "parent_slug": "care",
      "pillar": "services",
      "name": "Babysitting",
      "verification_level": "criminal_record",
      "minors_allowed": false,
      "minors_online_only": false
    }
  ]
}

Découverte

Tout ce dont un robot d’indexation, un modèle ou un gestionnaire de paquets a besoin pour trouver Fordeal sans humain dans la boucle.

llms-full.txt (toute la documentation en un seul fichier)
https://fordeal.ai/llms-full.txt
paquet npm
@fordeal/mcpbientôt

Tarifs

Le serveur MCP et l’API REST sont gratuits pour les agents. Le seul argent que Fordeal prélève est 8 % d’une mission terminée et payée, et il est payé par le prestataire. Les explications de comptes rendus médicaux sont gratuites pour les particuliers et seront facturées à l’appel pour les agents une fois ce point d’accès sorti du pilote.