[Dagon Inference](https://inference.dagon.so/) / Become a provider

# Sell your inference through Dagon.

Published 2026-11-06 · Last updated 2026-11-07

Any inference service can apply to be routed by the Dagon Inference gateway. Copy the prompt below and give it to your AI assistant. It reads your documentation, terms and pricing, asks you what it cannot find, and writes one JSON application. Paste that JSON into the form on this page, or have your AI send it to `POST /v1/provider-applications`. We review every application by hand.

## Step 1: copy the prompt

The prompt tells your AI what to collect and in what shape. It is also at [/provider-application.md](https://inference.dagon.so/provider-application.md), and the JSON Schema it fills is at [/provider-application.schema.json](https://inference.dagon.so/provider-application.schema.json).

````
# Apply to sell inference through Dagon Inference

You are helping my company apply to become an inference provider for Dagon Inference (https://inference.dagon.so). Dagon is a metered API gateway that resells open-weight models with refusal behavior removed ("abliterated" models) from several providers to developers and AI agents, through OpenAI- and Anthropic-compatible endpoints, paid in USDC. Dagon is operated by Inkwell Finance, Inc. d/b/a Dagon, a Delaware corporation.

Your job: produce one JSON document that describes our company and our inference service accurately and validates against the JSON Schema at the end of this message (also at https://inference.dagon.so/provider-application.schema.json).

## How to work

1. Research first. Read our website, API documentation, model list and pricing, terms of service, privacy policy, acceptable use policy and any data processing agreement. If you can make HTTP requests, call our models endpoint. If you have access to our dashboard, internal documents or earlier conversations, use them.
2. Then ask me, in one batch, for everything you could not find: legal entity details, registration number, beneficial owners, the signatory, tax status, contacts, whether we permit resale, attribution and logo use, how Dagon would pay us, and anything else the schema needs.
3. Never invent a value. Use null where the schema allows it, and add a line to open_questions for each thing you could not confirm. Legal facts, prices and permissions must come from our documents or from me.
4. Do not ask me for API keys and do not put any in the document: set "credentials" to null. I will paste keys into the form at https://inference.dagon.so/become-a-provider myself, where they are sealed on arrival to a key Dagon holds offline.
5. Conventions: every key in the schema must be present; countries are ISO 3166-1 alpha-2 codes (for example "US"); prices are US dollars per 1,000,000 tokens at the rate a reseller would pay; URLs are https; "schema_version" is "2026-11-06".
6. Before anything is sent, show me the complete JSON and a plain-English list of every commitment and permission in "resale", "branding", "data_handling", "compliance" and "attestations". These are statements made for our company. Wait for my explicit approval.
7. To submit, either I paste the JSON into the form at https://inference.dagon.so/become-a-provider, or, if you can make HTTP requests and I approve, you send it:

   curl -sS https://inference.dagon.so/v1/provider-applications -H 'content-type: application/json' --data @application.json

   A 400 response lists each field that failed validation ("errors": path and message): fix them and send again. A 201 response carries the application id, a "status_token" shown only once (give it to me), and "findings": "blocking" items must be resolved before an agreement, "required" items are documents or terms the agreement will need, "info" is context. GET https://inference.dagon.so/v1/provider-applications/<id> with "Authorization: Bearer <status_token>" shows the review status.

   If the 201 says "status": "unverified", a 6-digit code was emailed to contacts.primary.email and nobody reviews the application until it is entered. Ask me for the code, then send it within 30 minutes:

   curl -sS https://inference.dagon.so/v1/provider-applications/<id>/verify -H 'content-type: application/json' --data '{"status_token": "<status_token>", "code": "<code>"}'

   A 200 with "status": "received" means it is verified. Five wrong codes make a code unusable; for a new one POST {"status_token": "<status_token>"} to https://inference.dagon.so/v1/provider-applications/<id>/resend-code (at most once a minute and five times a day). A 503 "verification_email_failed" means the email could not be sent: its body still carries the id and status_token; wait a minute and use resend-code rather than submitting again. Unverified applications are deleted 72 hours after submission.

   The page and the endpoint refuse connections from the EU, the EEA and the UK (HTTP 451, the gateway's location block). If that is where I or you connect from, email the JSON to legal@inkwell.finance instead, without any API keys; we will arrange keys during review.

## What Dagon needs from a provider, so you understand the questions

- An OpenAI Chat Completions, OpenAI Responses or Anthropic Messages API with server-sent event streaming, reporting token usage in every response, including the final event of a stream. Dagon bills its customers from the usage the provider reports.
- Permission to resell access to its own customers at its own prices, and to name the provider as the one serving a model (price list, model pages, signed receipts, privacy policy). Dagon's customers can be anonymous (no email or identity check) and can be AI agents paying per request.
- No training on Dagon's users' prompts or outputs; disclosed retention, sub-processors and human review; breach notice within 72 hours.
- Preferably a prepaid balance with a balance endpoint, and an admin API that creates a separate key, with a spend limit, for each Dagon customer.
- For each model: the base model and its license, how refusal behavior was changed, quantization, context window, output limit and prices. Each model must pass an identity and refusal check before Dagon routes it.
- The agreement is with Inkwell Finance, Inc. d/b/a Dagon, governed by the laws of the State of Delaware, USA unless agreed otherwise. Dagon does not serve the EU, EEA or UK, and cannot work with companies located in, operating in or owned from Cuba, Iran, North Korea, Russia, Belarus or the occupied regions of Ukraine.

Submitting this application does not create an agreement. A person at Dagon reviews it, and a written agreement signed by both sides follows if we go ahead.

## JSON Schema

```json
{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://inference.dagon.so/provider-application.schema.json","title":"Dagon Inference provider application","description":"One inference service's application to be routed by Dagon Inference (https://inference.dagon.so). Every key is required; use null where allowed for anything you cannot confirm, and say why in open_questions. Countries are ISO 3166-1 alpha-2 codes. Prices are US dollars per 1,000,000 tokens. URLs are https.","type":"object","additionalProperties":false,"required":["schema_version","company","contacts","signatory","service","api","models","billing","key_management","data_handling","policies","resale","branding","compliance","attestations","open_questions","notes"],"properties":{"schema_version":{"const":"2026-11-06","description":"The version of this schema."},"company":{"type":"object","description":"The legal entity.","additionalProperties":false,"required":["legal_name","trade_name","entity_type","registration_number","country","region","registered_address","headquarters_country","website","publicly_traded","parent_company","beneficial_owners"],"properties":{"legal_name":{"type":"string","minLength":1,"maxLength":200,"description":"Registered legal name of the entity that will sign the agreement."},"trade_name":{"type":"string","minLength":1,"maxLength":200,"description":"Brand users know the service by."},"entity_type":{"type":"string","enum":["corporation","llc","partnership","sole_proprietorship","nonprofit","other"],"description":"Legal form."},"registration_number":{"type":["string","null"],"minLength":1,"maxLength":200,"description":"Company registration or file number in its country of incorporation."},"country":{"type":"string","format":"iso3166-1-alpha-2","pattern":"^[A-Z]{2}$","description":"Country of incorporation."},"region":{"type":["string","null"],"minLength":1,"maxLength":200,"description":"State, province or region of incorporation (e.g. Delaware, Wyoming, Ontario)."},"registered_address":{"type":"string","minLength":1,"maxLength":500,"description":"Registered address."},"headquarters_country":{"type":"string","format":"iso3166-1-alpha-2","pattern":"^[A-Z]{2}$","description":"Country of the principal place of business."},"website":{"type":"string","format":"uri","pattern":"^https://","maxLength":500,"description":"Company website."},"publicly_traded":{"type":"boolean","description":"Whether the company's shares trade on a public exchange."},"parent_company":{"type":["string","null"],"minLength":1,"maxLength":200,"description":"Legal name of any parent company."},"beneficial_owners":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["name","citizenship","residence","ownership_pct"],"properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"Full name of the person or entity."},"citizenship":{"type":"array","items":{"type":"string","format":"iso3166-1-alpha-2","pattern":"^[A-Z]{2}$"},"minItems":1,"maxItems":60,"uniqueItems":true,"description":"Countries of citizenship (or of incorporation, for an entity)."},"residence":{"type":"string","format":"iso3166-1-alpha-2","pattern":"^[A-Z]{2}$","description":"Country of residence (or of the principal place of business, for an entity)."},"ownership_pct":{"type":"number","minimum":0,"maximum":100,"description":"Direct and indirect ownership, in percent."}}},"minItems":0,"maxItems":20,"description":"Everyone who owns or controls 25% or more, directly or indirectly. Empty only when the company is publicly traded or no one reaches 25%."}}},"contacts":{"type":"object","description":"People we talk to.","additionalProperties":false,"required":["primary","technical","billing","security_email"],"properties":{"primary":{"type":"object","description":"Who manages this relationship.","additionalProperties":false,"required":["name","title","email"],"properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"Full name."},"title":{"type":["string","null"],"minLength":1,"maxLength":200,"description":"Job title."},"email":{"type":"string","format":"email","maxLength":254,"description":"Business email."}}},"technical":{"type":"object","description":"Engineer we work with on the integration and during incidents.","additionalProperties":false,"required":["name","title","email"],"properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"Full name."},"title":{"type":["string","null"],"minLength":1,"maxLength":200,"description":"Job title."},"email":{"type":"string","format":"email","maxLength":254,"description":"Business email."}}},"billing":{"type":"object","description":"Who handles invoices, payments and balance top-ups.","additionalProperties":false,"required":["name","title","email"],"properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"Full name."},"title":{"type":["string","null"],"minLength":1,"maxLength":200,"description":"Job title."},"email":{"type":"string","format":"email","maxLength":254,"description":"Business email."}}},"security_email":{"type":"string","format":"email","maxLength":254,"description":"Where we report abuse, security issues and legal requests concerning your service."}}},"signatory":{"type":"object","description":"The person who will sign the agreement.","additionalProperties":false,"required":["name","title","email","has_authority"],"properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"Full name."},"title":{"type":"string","minLength":1,"maxLength":200,"description":"Job title."},"email":{"type":"string","format":"email","maxLength":254,"description":"Business email."},"has_authority":{"type":"boolean","description":"Whether this person can sign contracts that bind the company."}}},"service":{"type":"object","description":"The inference service.","additionalProperties":false,"required":["name","description","launched_on","infrastructure_countries","status_page_url","uptime_commitment_pct","incident_contact"],"properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"Name of the inference service."},"description":{"type":"string","minLength":1,"maxLength":1000,"description":"What the service is, in a few sentences."},"launched_on":{"type":["string","null"],"pattern":"^\\d{4}-\\d{2}(-\\d{2})?$","description":"When the service launched (YYYY-MM or YYYY-MM-DD)."},"infrastructure_countries":{"type":"array","items":{"type":"string","format":"iso3166-1-alpha-2","pattern":"^[A-Z]{2}$"},"minItems":1,"maxItems":60,"uniqueItems":true,"description":"Countries where the GPUs that would serve our requests are located."},"status_page_url":{"type":["string","null"],"format":"uri","pattern":"^https://","maxLength":500,"description":"Public status page."},"uptime_commitment_pct":{"type":["number","null"],"minimum":0,"maximum":100,"description":"Monthly uptime committed in writing (an SLA), else null."},"incident_contact":{"type":"string","minLength":1,"maxLength":500,"description":"How our operators reach your engineers during an incident (shared chat channel, email, phone) and how fast you respond."}}},"api":{"type":"object","description":"How we call the service.","additionalProperties":false,"required":["base_url","surfaces","auth_header","streaming_sse","usage_in_response","usage_in_stream","cached_tokens_reported","reasoning_tokens","request_id_header","models_endpoint","models_endpoint_requires_key","prices_in_models_endpoint","rate_limits","max_request_seconds","error_format","out_of_balance_status","docs_url"],"properties":{"base_url":{"type":"string","format":"uri","pattern":"^https://","maxLength":500,"description":"Origin we call, without /v1 (e.g. https://api.example.com)."},"surfaces":{"type":"array","items":{"type":"string","enum":["openai_chat_completions","openai_responses","anthropic_messages"]},"minItems":1,"uniqueItems":true,"description":"Endpoints served under base_url: /v1/chat/completions, /v1/responses, /v1/messages."},"auth_header":{"type":"string","enum":["authorization_bearer","x_api_key","both"],"description":"How an API key is sent."},"streaming_sse":{"type":"boolean","description":"Whether responses stream as server-sent events when stream is true."},"usage_in_response":{"type":"boolean","description":"Whether every non-streaming response reports input and output token counts."},"usage_in_stream":{"type":"string","enum":["always","when_requested","never"],"description":"Whether a stream's final event reports token usage; when_requested means only with stream_options.include_usage."},"cached_tokens_reported":{"type":"boolean","description":"Whether usage reports cached (prompt-cache) input tokens separately."},"reasoning_tokens":{"type":"string","enum":["no_reasoning_models","reported_and_billed_as_output","billed_separately","billed_but_not_reported"],"description":"How reasoning tokens are reported and billed."},"request_id_header":{"type":["string","null"],"minLength":1,"maxLength":100,"description":"Response header carrying your request id (e.g. x-request-id)."},"models_endpoint":{"type":["string","null"],"format":"uri","pattern":"^https://","maxLength":500,"description":"Full URL of your model list (OpenAI GET /v1/models format)."},"models_endpoint_requires_key":{"type":["boolean","null"],"description":"Whether the model list needs an API key; null when there is no model list."},"prices_in_models_endpoint":{"type":"boolean","description":"Whether the model list states each model's prices."},"rate_limits":{"type":"object","description":"Limits a single reseller account would have; null where there is none.","additionalProperties":false,"required":["requests_per_minute","tokens_per_minute","max_concurrent_requests","raisable_for_resellers"],"properties":{"requests_per_minute":{"type":["integer","null"],"minimum":1,"maximum":10000000,"description":"Requests per minute per key or account."},"tokens_per_minute":{"type":["integer","null"],"minimum":1,"maximum":10000000000,"description":"Tokens per minute per key or account."},"max_concurrent_requests":{"type":["integer","null"],"minimum":1,"maximum":1000000,"description":"Concurrent requests per key or account."},"raisable_for_resellers":{"type":"boolean","description":"Whether you raise these limits for a reseller."}}},"max_request_seconds":{"type":["integer","null"],"minimum":1,"maximum":86400,"description":"Longest a single request may run before you end it."},"error_format":{"type":"string","enum":["openai","anthropic","other"],"description":"Shape of error bodies."},"out_of_balance_status":{"type":["integer","null"],"minimum":400,"maximum":599,"description":"HTTP status returned when the account's balance is used up (e.g. 402)."},"docs_url":{"type":"string","format":"uri","pattern":"^https://","maxLength":500,"description":"API documentation."}}},"models":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","display_name","base_model","base_model_license","modification","modification_details","weights_url","quantization","quantization_details","total_parameters_billion","active_parameters_billion","context_tokens","max_output_tokens","input_modalities","features","price_input_usd_per_mtok","price_cached_input_usd_per_mtok","price_cache_write_usd_per_mtok","price_output_usd_per_mtok","content_filtering","served_from"],"properties":{"id":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[A-Za-z0-9._:/@+-]+$","description":"Exact model id sent in requests."},"display_name":{"type":"string","minLength":1,"maxLength":200,"description":"Display name."},"base_model":{"type":"string","minLength":1,"maxLength":200,"description":"Original model, ideally a Hugging Face repo id (e.g. deepseek-ai/DeepSeek-V3.1)."},"base_model_license":{"type":"string","minLength":1,"maxLength":100,"description":"License of the base model weights (e.g. MIT, Apache-2.0, Llama 3.3 Community License)."},"modification":{"type":"string","enum":["abliterated","fine_tuned_uncensored","abliterated_and_fine_tuned","system_prompt_only","none","other"],"description":"How refusal behavior was changed."},"modification_details":{"type":"string","minLength":1,"maxLength":1000,"description":"Method, who made the modified weights, and anything else that differs from the base model."},"weights_url":{"type":["string","null"],"format":"uri","pattern":"^https://","maxLength":500,"description":"Where the served weights are published, if they are."},"quantization":{"type":"string","enum":["bf16","fp16","fp8","int8","nvfp4","mxfp4","awq_int4","gptq_int4","gguf_q8_0","gguf_q6_k","gguf_q5_k_m","gguf_q4_k_m","other"],"description":"Precision of the served weights."},"quantization_details":{"type":["string","null"],"minLength":1,"maxLength":300,"description":"Details when quantization is other, or anything mixed (e.g. fp8 experts, bf16 attention)."},"total_parameters_billion":{"type":["number","null"],"minimum":0,"maximum":100000,"description":"Total parameters, in billions."},"active_parameters_billion":{"type":["number","null"],"minimum":0,"maximum":100000,"description":"Active parameters per token for mixture-of-experts models, in billions."},"context_tokens":{"type":"integer","minimum":1,"maximum":100000000,"description":"Context window, in tokens."},"max_output_tokens":{"type":"integer","minimum":1,"maximum":100000000,"description":"Most output tokens one request may produce."},"input_modalities":{"type":"array","items":{"type":"string","enum":["text","image","audio","video","file"]},"minItems":1,"uniqueItems":true,"description":"Input types accepted."},"features":{"type":"array","items":{"type":"string","enum":["tools","json_mode","structured_outputs","reasoning","prompt_caching","logprobs"]},"minItems":0,"uniqueItems":true,"description":"Features supported."},"price_input_usd_per_mtok":{"type":"number","minimum":0,"maximum":10000,"description":"Input price, US dollars per 1M tokens, at the rate a reseller would pay."},"price_cached_input_usd_per_mtok":{"type":["number","null"],"minimum":0,"maximum":10000,"description":"Cached input price per 1M tokens; null when not discounted."},"price_cache_write_usd_per_mtok":{"type":["number","null"],"minimum":0,"maximum":10000,"description":"Cache write price per 1M tokens; null when not charged separately."},"price_output_usd_per_mtok":{"type":"number","minimum":0,"maximum":10000,"description":"Output price, US dollars per 1M tokens."},"content_filtering":{"type":"string","enum":["none","input_only","output_only","input_and_output"],"description":"Moderation or filtering applied to this model's inputs or outputs."},"served_from":{"type":"array","items":{"type":"string","format":"iso3166-1-alpha-2","pattern":"^[A-Z]{2}$"},"minItems":1,"maxItems":60,"uniqueItems":true,"description":"Countries where this model runs."}}},"minItems":1,"maxItems":50,"description":"Every model you want routed."},"billing":{"type":"object","description":"How we pay you.","additionalProperties":false,"required":["mode","payment_methods","deposit_addresses","minimum_topup_usd","balance_endpoint","balance_endpoint_auth","balance_response_example","when_balance_runs_out","per_key_usage_export","price_change_notice_days","reseller_discount_pct","unused_balance_refundable","invoices_available","tax"],"properties":{"mode":{"type":"string","enum":["prepaid_balance","postpaid_invoice","either"],"description":"How a reseller pays."},"payment_methods":{"type":"array","items":{"type":"string","enum":["usdc_solana","usdc_base","usdc_ethereum","usdc_other_chain","usdt","bitcoin","card","ach","wire","other"]},"minItems":1,"uniqueItems":true,"description":"Ways we can pay."},"deposit_addresses":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["chain","asset","address"],"properties":{"chain":{"type":"string","enum":["solana","base","ethereum","arbitrum","polygon","bitcoin","tron","other"],"description":"Network."},"asset":{"type":"string","minLength":1,"maxLength":20,"description":"Asset (e.g. USDC)."},"address":{"type":"string","minLength":1,"maxLength":120,"description":"Address."}}},"minItems":0,"maxItems":10,"description":"Fixed crypto addresses we would pay to; empty when top-ups go through your dashboard or invoices. We screen them against the OFAC SDN list."},"minimum_topup_usd":{"type":["number","null"],"minimum":0,"maximum":10000000,"description":"Smallest top-up or invoice."},"balance_endpoint":{"type":["string","null"],"format":"uri","pattern":"^https://","maxLength":500,"description":"GET URL that returns the remaining prepaid balance."},"balance_endpoint_auth":{"type":"string","enum":["inference_key","admin_key","not_applicable"],"description":"Key the balance endpoint takes."},"balance_response_example":{"type":["string","null"],"minLength":1,"maxLength":2000,"description":"An example balance response body."},"when_balance_runs_out":{"type":"string","enum":["requests_refused","negative_balance_allowed","grace_period","not_applicable"],"description":"What happens at zero balance."},"per_key_usage_export":{"type":["string","null"],"format":"uri","pattern":"^https://","maxLength":500,"description":"API or export with usage and cost per key or project."},"price_change_notice_days":{"type":"integer","minimum":0,"maximum":365,"description":"Days of written notice before a price increase."},"reseller_discount_pct":{"type":["number","null"],"minimum":0,"maximum":100,"description":"Discount off list prices for a reseller, in percent."},"unused_balance_refundable":{"type":"string","enum":["yes","no","case_by_case"],"description":"Whether an unused prepaid balance is refunded when the agreement ends."},"invoices_available":{"type":"boolean","description":"Whether you issue invoices or receipts for top-ups."},"tax":{"type":"object","description":"Tax status.","additionalProperties":false,"required":["us_person","registrations","charges_vat_or_sales_tax"],"properties":{"us_person":{"type":"boolean","description":"Whether the company is a US person for US tax purposes."},"registrations":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["country","type","number"],"properties":{"country":{"type":"string","format":"iso3166-1-alpha-2","pattern":"^[A-Z]{2}$","description":"Country."},"type":{"type":"string","enum":["ein","vat","gst","other"],"description":"Kind of number."},"number":{"type":"string","minLength":1,"maxLength":50,"description":"The number."}}},"minItems":0,"maxItems":10,"description":"Tax registrations (EIN, VAT, GST)."},"charges_vat_or_sales_tax":{"type":"boolean","description":"Whether you add VAT, GST or sales tax to a reseller's charges."}}}}},"key_management":{"type":"object","description":"Managing many keys under one account.","additionalProperties":false,"required":["admin_api","admin_api_docs_url","capabilities","key_prefix","max_keys"],"properties":{"admin_api":{"type":"boolean","description":"Whether an admin key can create and revoke API keys programmatically, so each of our customers can get their own key."},"admin_api_docs_url":{"type":["string","null"],"format":"uri","pattern":"^https://","maxLength":500,"description":"Admin API documentation."},"capabilities":{"type":"array","items":{"type":"string","enum":["create_keys","revoke_keys","rotate_keys","per_key_spend_limit","per_key_rate_limit","per_key_usage","per_key_model_allowlist","projects_or_subaccounts","org_balance"]},"minItems":0,"uniqueItems":true,"description":"What the admin API can do."},"key_prefix":{"type":["string","null"],"minLength":1,"maxLength":40,"description":"Fixed prefix of your secret keys (e.g. sk-), for secret scanning."},"max_keys":{"type":["integer","null"],"minimum":1,"maximum":100000000,"description":"Most keys one account may hold."}}},"data_handling":{"type":"object","description":"What happens to our users' data.","additionalProperties":false,"required":["prompt_retention","prompt_retention_days","output_retention","output_retention_days","logged_metadata","trains_on_customer_content","human_review_of_content","sub_processors","forwards_to_other_model_providers","zero_retention_in_contract","breach_notification_hours","government_requests_policy_url"],"properties":{"prompt_retention":{"type":"string","enum":["not_stored","memory_only","stored"],"description":"Whether prompts are written to storage or logs."},"prompt_retention_days":{"type":["integer","null"],"minimum":0,"maximum":36500,"description":"Days stored prompts are kept."},"output_retention":{"type":"string","enum":["not_stored","memory_only","stored"],"description":"Whether outputs are written to storage or logs."},"output_retention_days":{"type":["integer","null"],"minimum":0,"maximum":36500,"description":"Days stored outputs are kept."},"logged_metadata":{"type":"array","items":{"type":"string","enum":["model","token_counts","cost","timestamps","api_key_id","client_ip","request_ids","error_details","user_field"]},"minItems":0,"uniqueItems":true,"description":"Metadata recorded per request."},"trains_on_customer_content":{"type":"boolean","description":"Whether prompts or outputs are used to train or improve models."},"human_review_of_content":{"type":"string","enum":["never","only_to_investigate_abuse_or_legal_requests","sampled","routinely"],"description":"When people read request content."},"sub_processors":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["name","role","country","receives_content"],"properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"Company name."},"role":{"type":"string","minLength":1,"maxLength":200,"description":"What it does (e.g. GPU hosting, logging)."},"country":{"type":"string","format":"iso3166-1-alpha-2","pattern":"^[A-Z]{2}$","description":"Country."},"receives_content":{"type":"boolean","description":"Whether it receives prompts or outputs."}}},"minItems":0,"maxItems":30,"description":"Third parties that process our requests."},"forwards_to_other_model_providers":{"type":"boolean","description":"Whether requests can be sent on to other model providers you choose."},"zero_retention_in_contract":{"type":"boolean","description":"Whether you will commit in the agreement that content is not stored."},"breach_notification_hours":{"type":["integer","null"],"minimum":1,"maximum":8760,"description":"Hours within which you notify us of a breach affecting our data."},"government_requests_policy_url":{"type":["string","null"],"format":"uri","pattern":"^https://","maxLength":500,"description":"How you handle law enforcement and government requests."}}},"policies":{"type":"object","description":"Your policies.","additionalProperties":false,"required":["terms_url","privacy_url","acceptable_use_url","dpa_url","sla_url","prohibited_uses","end_user_minimum_age","restricted_countries","csam"],"properties":{"terms_url":{"type":"string","format":"uri","pattern":"^https://","maxLength":500,"description":"Terms of service."},"privacy_url":{"type":"string","format":"uri","pattern":"^https://","maxLength":500,"description":"Privacy policy."},"acceptable_use_url":{"type":["string","null"],"format":"uri","pattern":"^https://","maxLength":500,"description":"Acceptable use policy."},"dpa_url":{"type":["string","null"],"format":"uri","pattern":"^https://","maxLength":500,"description":"Data processing agreement."},"sla_url":{"type":["string","null"],"format":"uri","pattern":"^https://","maxLength":500,"description":"Service level agreement."},"prohibited_uses":{"type":"string","minLength":1,"maxLength":2000,"description":"What end users must never do with your models, in your own words. We pass this on to our users."},"end_user_minimum_age":{"type":"integer","minimum":13,"maximum":21,"description":"Youngest age at which your terms allow use."},"restricted_countries":{"type":"array","items":{"type":"string","format":"iso3166-1-alpha-2","pattern":"^[A-Z]{2}$"},"minItems":0,"maxItems":60,"uniqueItems":true,"description":"Countries your terms forbid serving."},"csam":{"type":"object","description":"Child sexual abuse material.","additionalProperties":false,"required":["prohibited","detection","reports_to_authorities"],"properties":{"prohibited":{"type":"boolean","description":"Whether child sexual abuse material is prohibited."},"detection":{"type":"string","enum":["none","hash_matching","classifier","hash_matching_and_classifier"],"description":"How it is detected."},"reports_to_authorities":{"type":"boolean","description":"Whether you report it to NCMEC or the competent authority."}}}}},"resale":{"type":"object","description":"Permission to resell.","additionalProperties":false,"required":["resale_permitted","own_pricing_permitted","attribution_permitted","anonymous_customers_permitted","agents_permitted","end_user_terms","restrictions","permission_reference"],"properties":{"resale_permitted":{"type":"boolean","description":"You permit Dagon to resell access to the listed models to Dagon's own customers, under Dagon's brand and terms."},"own_pricing_permitted":{"type":"boolean","description":"Dagon may set its own prices, including a markup over yours."},"attribution_permitted":{"type":"boolean","description":"Dagon may name you as the provider that serves a model: in its price list, model pages, signed receipts, terms and privacy policy."},"anonymous_customers_permitted":{"type":"boolean","description":"Dagon's customers sign up without an email or identity check and pay in USDC. Is that acceptable?"},"agents_permitted":{"type":"boolean","description":"Dagon's customers include AI agents that pay per request. Is that acceptable?"},"end_user_terms":{"type":["string","null"],"minLength":1,"maxLength":2000,"description":"Terms our customers must accept to use your models, beyond your acceptable use policy."},"restrictions":{"type":["string","null"],"minLength":1,"maxLength":2000,"description":"Any other condition on resale (customer types, use cases, volumes)."},"permission_reference":{"type":["string","null"],"minLength":1,"maxLength":300,"description":"Where this permission is already recorded, if anywhere (e.g. 'email from Jane Doe, CEO, 2026-11-06')."}}},"branding":{"type":"object","description":"Your logo on our site.","additionalProperties":false,"required":["logo_use_permitted","display_name","link_url","logo_svg_url","logo_png_url","brand_guidelines_url","logo_conditions"],"properties":{"logo_use_permitted":{"type":"boolean","description":"Dagon may show your logo and name on its website as a provider it is authorized to resell."},"display_name":{"type":"string","minLength":1,"maxLength":100,"description":"Your name exactly as it should appear."},"link_url":{"type":"string","format":"uri","pattern":"^https://","maxLength":500,"description":"Where your logo should link."},"logo_svg_url":{"type":["string","null"],"format":"uri","pattern":"^https://","maxLength":500,"description":"Vector logo (SVG), ideally single color."},"logo_png_url":{"type":["string","null"],"format":"uri","pattern":"^https://","maxLength":500,"description":"Raster logo (PNG, transparent background)."},"brand_guidelines_url":{"type":["string","null"],"format":"uri","pattern":"^https://","maxLength":500,"description":"Brand guidelines."},"logo_conditions":{"type":["string","null"],"minLength":1,"maxLength":1000,"description":"Conditions on logo use (colors, clear space, wording)."}}},"compliance":{"type":"object","description":"Compliance.","additionalProperties":false,"required":["sanctions","certifications","legal_matters","model_licenses_respected"],"properties":{"sanctions":{"type":"object","description":"Sanctions.","additionalProperties":false,"required":["sanctioned_owners_or_controllers","operations_in_sanctioned_jurisdictions","screens_own_customers"],"properties":{"sanctioned_owners_or_controllers":{"type":"boolean","description":"Whether the company is owned 50% or more, in aggregate, or controlled by anyone on a US, UN, EU or UK sanctions list, or by a sanctioned government."},"operations_in_sanctioned_jurisdictions":{"type":"boolean","description":"Whether the company has staff, infrastructure or bank accounts in a comprehensively sanctioned country or region."},"screens_own_customers":{"type":"boolean","description":"Whether you screen your own customers against sanctions lists."}}},"certifications":{"type":"array","items":{"type":"string","enum":["soc2_type1","soc2_type2","iso27001","iso42001","hipaa","pci_dss"]},"minItems":0,"uniqueItems":true,"description":"Current certifications or attestations."},"legal_matters":{"type":["string","null"],"minLength":1,"maxLength":2000,"description":"Pending litigation, regulator inquiries or law enforcement action concerning the service; null when there is none."},"model_licenses_respected":{"type":"boolean","description":"Whether serving and reselling each listed model complies with its base model license."}}},"attestations":{"type":"object","description":"Statements made for the company.","additionalProperties":false,"required":["information_accurate","authority_to_submit","consents_to_screening","reviewed_by_human","accepts_governing_law","proposed_governing_law"],"properties":{"information_accurate":{"const":true,"description":"The information is accurate and complete to the best of the company's knowledge."},"authority_to_submit":{"const":true,"description":"The submitter may make these statements for the company."},"consents_to_screening":{"const":true,"description":"Dagon may screen the company, its owners and its signatory against sanctions lists."},"reviewed_by_human":{"const":true,"description":"A person at the company read this document before it was sent."},"accepts_governing_law":{"type":"boolean","description":"Whether the company accepts that the agreement is governed by the laws of the State of Delaware, USA."},"proposed_governing_law":{"type":["string","null"],"minLength":1,"maxLength":200,"description":"The law the company proposes instead, when it does not accept that one."}}},"open_questions":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500},"minItems":0,"maxItems":30,"description":"Everything you could not confirm, and what you need from us."},"notes":{"type":["string","null"],"minLength":1,"maxLength":4000,"description":"Anything else we should know."},"credentials":{"type":["object","null"],"additionalProperties":false,"properties":{"inference_api_key":{"type":["string","null"],"maxLength":1000,"description":"A dedicated, funded API key for testing your models."},"admin_api_key":{"type":["string","null"],"maxLength":1000,"description":"An admin key for managing per-customer keys."}},"description":"Optional. Leave null in the document; a person pastes keys into the form at /become-a-provider. They are sealed on arrival to a key held offline and cannot be read by the server."}}}
```
````

## Step 2: give it to your AI

Paste the prompt into an assistant that can read your website and documentation. It will:

- read your API documentation, terms of service, privacy policy and pricing pages;
- ask you for anything it cannot find there, such as your company's registration details, your beneficial owners and who signs;
- leave a field empty or say it is unknown rather than invent an answer;
- leave API keys out of the JSON: you enter them in this form yourself.

Read the result before you send it. The application contains statements of fact about your company and your service, and attestations that only you can confirm. Check each one.

## Step 3: send it back

Paste the JSON your AI wrote. If you add API keys, they are sealed on arrival with an age public key whose private key the operator holds offline; the gateway that receives them cannot decrypt them. Send a dedicated key you can revoke, not your main one.

Application JSON

Inference test key Optional. Lets us run the identity and refusal checks on your models. Admin API key Optional. Lets us test per-customer key creation and the balance endpoint.

An AI agent can submit the same file itself:

```
curl -sS https://inference.dagon.so/v1/provider-applications -H 'content-type: application/json' --data @application.json
```

The body is at most 256 KB. A 201 returns the application id and a status token; a 400 lists each invalid field by its JSON path.

We email a 6-digit code to the primary contact. Nobody reviews the application until the code is entered: on this page, or by your AI with `POST /v1/provider-applications/{id}/verify` and `{"status_token", "code"}`. The code lasts 30 minutes, five wrong entries void it, and `POST /v1/provider-applications/{id}/resend-code` sends a new one. An application never confirmed is deleted after 72 hours.

This page and the endpoint refuse connections from the European Union, the EEA and the United Kingdom (HTTP 451), where Dagon does not offer its service. A provider there can still apply: email the JSON to [legal@inkwell.finance](mailto:legal@inkwell.finance), without API keys, and we arrange keys during review.

## What we check

- Jurisdiction and sanctions. Dagon is operated by Inkwell Finance, Inc. d/b/a Dagon, a Delaware corporation. We cannot work with applicants located in, operating in or owned from Cuba, Iran, North Korea, Russia, Belarus or the occupied regions of Ukraine, and we screen the company, its owners and its signatory against sanctions lists.
- Permission to resell your models through the gateway, and how you want them attributed.
- Permission to show your name and logo on this site.
- Data handling: what you retain and for how long, whether you train on prompts or outputs, and which sub-processors see them.
- API compatibility: OpenAI Chat Completions, OpenAI Responses or Anthropic Messages, streaming over SSE, and token usage reported in every response, including the last event of a stream.
- Models: the base model, how it was modified, the quantization, the context length, and prices per 1M input, cached input and output tokens.
- Billing: how we pay you. A prepaid balance with an endpoint that reports it is preferred.
- Key management: preferably an admin API that creates and revokes a key, with a spend limit, for each of our customers.
- Each model passes an identity check and a refusal check before it is routed.

Approval is a decision made by a person after review, not by the endpoint. If we approve, a signed agreement follows.

## Common questions

### Is the application binding?

No. It is a request to be routed plus statements of fact about your company and service. The terms of any resale are set in a separate agreement that both sides sign.

### What happens to our API keys?

They are sealed with an age public key as they arrive; the private key is held offline by the operator, so the gateway cannot read them. They are used to test your service during review, and deleted if the application is declined or withdrawn. Send dedicated keys you can revoke.

### Why do we get a code by email?

It shows that the primary contact address is real and reachable, and keeps automated spam out of the review queue. An application whose code is never entered is not reviewed and is deleted after 72 hours. The email contains only the application id and the code.

### How do we check the status?

Call `GET https://inference.dagon.so/v1/provider-applications/{id}` with `Authorization: Bearer <status_token>`. The token is returned once, in the response to your submission; keep it.
