Submit a source-backed reaction for human validation
POST /v1/contributions
POST /v1/contributions
Non-billable submission by a verified member with kb:query. Source attribution, shareable rights, a source quotation and idempotency key are required. The gateway runs free strict chemistry and novelty checks; machine validation does not establish source authenticity or experimental success. Eligible novel submissions may receive one bonus query call, and independently approved contributions ten additional calls. Rewards are not money. Content/source/reaction deduplication and daily reward limits prevent repeated grants. Pending or invalid chemistry never becomes a shared accepted fact. No user query, private context or secrets should be included. Limited separately to 10/user/hour and 100/workspace/hour. Source URLs are recorded for human review, never fetched automatically.
Authorization
This operation requires a bearer credential. The description defines additional role, scope or first-party-session restrictions; an API key does not grant those permissions by itself.
Request body
| Property | Type | Required | Details |
|---|---|---|---|
reaction_smiles | string | yes | |
source | ContributionSource | yes | |
conditions | ContributionConditions ∣ null | no | |
summary | string ∣ null | no | |
idempotency_key | string | yes |
Full schema: ContributionSubmission
{
"properties": {
"reaction_smiles": {
"type": "string",
"maxLength": 100000,
"minLength": 3,
"title": "Reaction Smiles"
},
"source": {
"$ref": "#/components/schemas/ContributionSource"
},
"conditions": {
"anyOf": [
{
"$ref": "#/components/schemas/ContributionConditions"
},
{
"type": "null"
}
]
},
"summary": {
"anyOf": [
{
"type": "string",
"maxLength": 2000,
"minLength": 10
},
{
"type": "null"
}
],
"title": "Summary"
},
"idempotency_key": {
"type": "string",
"maxLength": 128,
"minLength": 8,
"pattern": "^[A-Za-z0-9_.:-]+$",
"title": "Idempotency Key"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"reaction_smiles",
"source",
"idempotency_key"
],
"title": "ContributionSubmission"
}Responses
| HTTP | Details | Type |
|---|---|---|
| 201 | Successful Response | application/json: ReactionContribution |
| 401 | Unauthorized | application/problem+json: ProblemDetails |
| 403 | Forbidden | application/problem+json: ProblemDetails |
| 404 | Not Found | application/problem+json: ProblemDetails |
| 409 | Conflict | application/problem+json: ProblemDetails |
| 413 | Request Entity Too Large | application/problem+json: ProblemDetails |
| 422 | Unprocessable Entity | application/problem+json: ProblemDetails |
| 429 | Too Many Requests | application/problem+json: ProblemDetails |
| 502 | Bad Gateway | application/problem+json: ProblemDetails |
| 503 | Service Unavailable | application/problem+json: ProblemDetails |
Response: ReactionContribution
| Property | Type | Required | Details |
|---|---|---|---|
id | string | yes | |
observation_id | string | yes | |
reaction_smiles | string | yes | |
canonical_reaction_smiles | string ∣ null | yes | |
source | ContributionSource | yes | |
conditions | ContributionConditions ∣ null | no | |
summary | string ∣ null | no | |
state | "pending" ∣ "needs_review" ∣ "accepted" ∣ "rejected" ∣ "duplicate" | yes | |
created_at | string | yes | |
updated_at | string | yes | |
validation | ContributionValidation | yes | |
rewards | ContributionRewards | yes | |
review | ReviewedDecision ∣ null | no | |
duplicate_of | string ∣ null | no |
Full schema
{
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"observation_id": {
"type": "string",
"title": "Observation Id"
},
"reaction_smiles": {
"type": "string",
"title": "Reaction Smiles"
},
"canonical_reaction_smiles": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Canonical Reaction Smiles"
},
"source": {
"$ref": "#/components/schemas/ContributionSource"
},
"conditions": {
"anyOf": [
{
"$ref": "#/components/schemas/ContributionConditions"
},
{
"type": "null"
}
]
},
"summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Summary"
},
"state": {
"type": "string",
"enum": [
"pending",
"needs_review",
"accepted",
"rejected",
"duplicate"
],
"title": "State"
},
"created_at": {
"type": "string",
"title": "Created At"
},
"updated_at": {
"type": "string",
"title": "Updated At"
},
"validation": {
"$ref": "#/components/schemas/ContributionValidation"
},
"rewards": {
"$ref": "#/components/schemas/ContributionRewards"
},
"review": {
"anyOf": [
{
"$ref": "#/components/schemas/ReviewedDecision"
},
{
"type": "null"
}
]
},
"duplicate_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Duplicate Of"
}
},
"additionalProperties": true,
"type": "object",
"required": [
"id",
"observation_id",
"reaction_smiles",
"canonical_reaction_smiles",
"source",
"state",
"created_at",
"updated_at",
"validation",
"rewards"
],
"title": "ReactionContribution"
}This page is generated from OpenAPI; examples are schemas, not a fabricated successful response.