{"audit":{"version":"1.5","generated_at":"2026-10-31T21:16:04.582506+00:00","generated_by":"Agenstry","report_url":"https://agenstry.com/agents/odilelabs.com","methodology_url":"https://agenstry.com/methodology","verifier_jwks_url":"https://agenstry.com/.well-known/jwks.json","subject":{"domain":"odilelabs.com","name":"OdileM2M","url":"https://odilelabs.com/.well-known/agent-card.json"}},"identity":{"provider":{"organization":"Odile Labs","url":"https://odilelabs.com"},"registry_verification":null,"signature":{"signed":false,"signature_valid":null}},"protocol":{"version":"1.0","supports_streaming":false,"supports_push_notifications":true},"operational":{"live_state":"live","live_responds":true,"last_status_code":200,"last_elapsed_ms":791,"last_error":null},"track_record":{"first_seen":"2026-10-31T19:04:07.999880+00:00","last_checked":"2026-10-31T19:04:07.999880+00:00","last_seen_ok":"2026-10-31T19:04:07.999880+00:00","checks_total":1,"checks_ok":1,"uptime_pct":100.0,"uptime_window_days":30,"uptime_probes":1,"archived":false,"archived_reason":null},"conformance":{"score":65,"grade":"C","summary":"C-grade: usable but has clear conformance issues, review the breakdown below.","criteria":[{"key":"valid_card","label":"Valid AgentCard","points":10,"max_points":10,"status":"pass","detail":"Parseable AgentCard returned by the well-known endpoint (Agenstry readiness signal; not an official TCK certification)."},{"key":"live_responds","label":"Live JSON-RPC","points":25,"max_points":25,"status":"pass","detail":"Endpoint responds to a negotiated A2A SendMessage probe (answers in ~809 ms)."},{"key":"protocol_version","label":"Protocol version","points":10,"max_points":10,"status":"pass","detail":"Declares A2A 1.0 with supportedInterfaces[] (current v1 card shape)."},{"key":"signature","label":"JWS signature","points":0,"max_points":10,"status":"info","detail":"Card is unsigned (most published agents are)."},{"key":"uptime","label":"Uptime track record","points":0,"max_points":15,"status":"info","detail":"Only 1 probe so far, need ≥5 for an uptime grade."},{"key":"skills","label":"Skill declaration","points":10,"max_points":10,"status":"pass","detail":"Declares 7 skills with structured metadata."},{"key":"verified_identity","label":"Verified Identity","points":5,"max_points":10,"status":"partial","detail":"Provider declared: Odile Labs (https://odilelabs.com). Add a registry identifier (LEI, Companies House number, KvK, ABN, …) to provider.legalEntity for full verified-business credit."},{"key":"freshness","label":"Freshness + modern flags","points":5,"max_points":5,"status":"pass","detail":"declares 1 modern capability flag(s) (x402); seen in upstream source within 0d"},{"key":"security","label":"Security declaration","points":0,"max_points":5,"status":"info","detail":"Neither securitySchemes nor securityRequirements declared — how to authenticate is unstated."}]},"card_read":{"findings":[],"clean":true,"source_url":"https://odilelabs.com/.well-known/agent-card.json"},"skills":[{"id":"find_business_agent","name":"Find a business agent","description":"Send skill find_business_agent and an E.164 number to resolve a participating business to its public agent card URL.","tags":["directory","phone"],"examples":["Find the agent for +15615295370."],"inputModes":[],"outputModes":[],"credits":0},{"id":"take_message","name":"Take a message","description":"First resolve a business; send this skill to the endpoint in its returned card. Save a caller’s name, callback number and need for the business owner. Returns a two-way thread: GetTask/tasks/get reads replies; SendMessage with taskId or contextId answers in the same thread. Use your signed-in identity or thread_token. Signed-in take_message requests may omit callback_number.","tags":["message"],"examples":["Leave a message asking for a callback."],"inputModes":[],"outputModes":[],"credits":1},{"id":"check_availability","name":"Check availability","description":"First resolve a business; send this skill to the endpoint in its returned card. Return the open slots offered by the business booking page.","tags":["calendar"],"examples":["Find the next time for a repair."],"inputModes":[],"outputModes":[],"credits":0},{"id":"book","name":"Book an appointment","description":"First resolve a business; send this skill to the endpoint in its returned card. Book one of the signed slots returned by check_availability, with the customer’s permission. Returns a two-way thread: GetTask/tasks/get reads replies; SendMessage with taskId or contextId answers in the same thread. Use your signed-in identity or thread_token. Signed-in take_message requests may omit callback_number.","tags":["booking"],"examples":["Book the offered slot for the customer."],"inputModes":[],"outputModes":[],"credits":5},{"id":"book_first_available","name":"Book the first open time","description":"First resolve a business; send this skill to the endpoint in its returned card. Try up to 5 preferred windows in order (date, optional after/before HH:MM, service) and book the first open time; if none is open, leave the owner a message with the wanted windows (fallback take_message) or book nothing (fallback none). Returns a two-way thread: GetTask/tasks/get reads replies; SendMessage with taskId or contextId answers in the same thread. Use your signed-in identity or thread_token. Signed-in take_message requests may omit callback_number.","tags":["booking"],"examples":["Book Monday after 2 PM, otherwise Tuesday morning, otherwise ask the owner."],"inputModes":[],"outputModes":[],"credits":5},{"id":"cancel_booking","name":"Cancel a booking","description":"First resolve a business; send this skill to the endpoint in its returned card. Cancel your confirmed booking using its booking_id and private cancel_token. Free; the delivered booking fee is not refunded.","tags":["booking"],"examples":["Cancel the appointment I booked."],"inputModes":[],"outputModes":[],"credits":0},{"id":"call_business","name":"Call a business (opt-in metered voice pilot)","description":"Separately enabled signed-in developer accounts only: informational voice, 2.5 credits per answered minute billed by the second with a 20-second minimum; maximum 600 seconds reserved before dialing. Actual opted-in Odile receptionist lines with read_direct_task can answer 24/7; US/Canada external landlines and verified worldwide SIP claims retain local weekday business hours. One call per number per 24 hours, three per account per day, consent, AI disclosure and permanent opt-out. Failed/unanswered calls cost zero; answered refusals consume time. Free-only connections never start voice.","tags":["phone"],"examples":["Ask a business to call the customer back about availability."],"inputModes":[],"outputModes":[],"enabled_by_default":false,"requires_account_enablement":true,"credits":2.5,"unit":"minute"}],"provenance":[{"source":"manifests","first_seen":"2026-10-31T19:04:07.999880+00:00"}],"recent_probes":[{"fetched_at":"2026-10-31T19:04:07.999880+00:00","ok":true,"status_code":200,"error":null,"elapsed_ms":791,"live_responds":true}],"catalog_attestation":null,"operator_revenue_evidence":{"evidence_class":"operator_submitted","authenticity":{"rung":"no_operator_evidence","rank":0,"why":"No verifiable operator evidence has been submitted for this agent.","thresholds":{"min_independent_payers":3,"min_verified_usd":25.0},"engine_table":"agent_authenticity","merge_rule":"max(existing_rank, rank)"},"metric_metadata":{"provenance":"operator_submitted_evidence","confidence":"attested","coverage":{"numerator":0},"as_of":"2026-10-31T21:16:04.592147+00:00","definition":"Revenue proofs submitted by the verified owner and re-checked by Agenstry against the settlement chain or the operator's own Stripe account. Only independently confirmed proofs are counted."},"counts":{"retained":0,"verified":0,"unverifiable":0},"verified":{"gross_usd":0.0,"transactions":0,"independent_payers":0},"detail_url":"https://agenstry.com/api/agents/odilelabs.com/evidence","dispute_url":"https://agenstry.com/agents/odilelabs.com/dispute"},"verification_history":[]}